본문 바로가기
Flutter

[Flutter] Firebase Firestore에서 데이터 가져오는 두 가지 방법

by 김무스비 2025. 1. 24.
728x90
반응형

Flutter에서 Firebase Firestore DB 데이터를 가져오는 법을 두 가지 케이스로 나눠서 정리해보려고 함니다.

첫 번째 케이스는 컬렉션>문서>필드에서 필드의 값을 기준으로 데이터를 가져오는 경우이고, 

두 번째 케이스는 컬렉션>문서>필드에서 문서의 값을 기준으로 데이터를 가져오는 경우입니다.


1. 필드의 값을 기준으로 가져올 때 

문서들을 돌면서 문서 안에 있는 stddate필드 기준으로 그날 그날 변하는 formattedDate와 일치하는 필드들을 가져오는 케이스다. 여러 문서를 대상으로 조건에 맞는 문서를 가져올 때 쓰면 좋을 듯 하다.

Firestore DB 구조는 다음과 같다.

collection_name (컬렉션)
├── Doc1 (문서)
│   ├── stddate: "20240527"
│   ├── pastdate_first: "20230527"
│   ├── pastdate_second: "20220401"
│   ├── pastdate_third: "20210301"
├── Doc2 (문서)
│   ├── stddate: "20240528"
│   ├── pastdate_first: "20230528"
│   ├── pastdate_second: "20220402"
│   ├── pastdate_third: "20210302"

이 경우, Future를 return하는 async 메서드 안에서 아래처럼 collection(컬렉션멍).where(필드명, isEqualTo: 비교할 값).get();으로 가져오고, 그 이후 작업(데이터 형태 변환 및 loop 등) 해주면 된다. 

 
    final QuerySnapshot snapshot = await _firestore
        .collection('collection_name')
        .where('date', isEqualTo: formattedDate)
        .get();

 

2. 문서 이름을 기준으로 가져올 때 

컬렉션 안에 있는 문서들 중 그날 그날 변하는 formattedDate와 일치하는 문서의 필드들을 가져오는 케이스다. 특정 문서를 직접 참조하여 데이터를 가져올 때 쓰면 좋을 듯 하다.

Firestore DB 구조는 다음과 같다.

collection_name_doc (컬렉션)
├── 20240527 (문서 ID)
│   ├── pastdate_first: "20230527"
│   ├── pastdate_second: "20220401"
│   ├── pastdate_third: "20210301"
├── 20240528 (문서 ID)
│   ├── pastdate_first: "20230528"
│   ├── pastdate_second: "20220402"
│   ├── pastdate_third: "20210302"

이 경우, Future를 return하는 async 메서드 안에서 아래처럼 collection(컬렉션명).doc(비교할값).get();으로 가져오고, 그 이후 작업(데이터 형태 변환 및 loop 등) 해주면 된다.   

final DocumentSnapshot snapshot =
    await _firestore.collection('collection_name_doc').doc(formattedDate).get();

끝~ 감사합니다.

728x90
반응형