컬렉션(Collection)
- 일종의 데이터 모음(폴더)
문서(Document)
- 컬렉션 안에 들어 있는 단일 데이터 항목
- 각각의 문서는 고유한 ID(uid) 존재
- Map 형태의 데이터를 저장
스냅샷(Snapshot)
- 데이터베이스에서 특정 문서(Document)나 쿼리(Query)의 특정 시점의 데이터의 상태를 "사진처럼 찍어서" 저장한 객체
- 현재 상태 캡처 : 데이터베이스의 특정 시점에 존재하는 데이터를 그대로 가져온다
- 데이터 읽기 : 문서나 쿼리의 결과를 읽을 때 사용
- 실시간 추적 : dart-
.snapshots()메서드를 사용하면 데이터의 변화를 실시간으로 추적 가능
QuerySnapshot<Map<String, dynamic>> QuerySnapshot- 여러 문서 검색 (collection.where(...).get())
→ snapshot.docs.map((doc){}) 로 문서 반복DocumentSnapshot<Map<String, dynamic>> DocumentSnapshot- 특정 문서 1개 조회 (doc(id).get())
FirebaseFirestore.instance.batch()
여러 개의 쓰기 작업(write operations)을 하나의 트랜잭션처럼 묶어서 실행할 수 있도록 해주는 함수.
- 즉, 한 번에 여러 문서에 대해
set,update,delete작업을 수행하고, 모두 성공하거나, 하나라도 실패하면 전부 실패를 보장하는 역할- 이렇게 묶은 작업은 마지막에
batch.commit()을 호출해서 실행한다- 예시
// Firestore 식물 목록 저장 Future<void> savePlantList(List<PlantModel> plants) async { final batch = FirebaseFirestore.instance.batch(); for (final plant in plants) { final docRef = _collection.doc(plant.cntntsNo); batch.set(docRef, plant.toJson(), SetOptions(merge: true)); // 병합 저장 } await batch.commit(); }
🔥 Firestore에서 DocumentReference 와 DocumentSnapshot 차이 완벽 정리
핵심 차이 요약
| 구분 | DocumentReference | DocumentSnapshot |
|---|---|---|
| 의미 | 문서의 위치(참조) | 문서의 실제 데이터 |
| 포함 내용 | 문서의 경로, ID 등 메타 정보 | 문서의 필드 데이터, 존재 여부 등 |
| 주요 메서드 | set(), update(), delete(), get() 등 | data(), exists, id 등 |
| 사용 목적 | 문서에 접근/조작할 때 | 문서가 있는지 확인하고 데이터를 읽을 때 |
🔗 DocumentReference
- Firestore 문서를 가리키는 참조 객체
- 예: 문서를 생성하거나, 업데이트, 삭제할 때 사용
- 예제 코드
final docRef = FirebaseFirestore.instance .collection('plants') .doc('myPlantId'); await docRef.set({'name': '로즈마리'}); // 문서 생성 또는 덮어쓰기 await docRef.update({'name': '바질'}); // 필드만 수정 await docRef.delete(); // 문서 삭제