get은 firebase에서 데이터를 읽는 가장 대표적인 메서드로서, 문서 또는 컬렉션의 현재 상태를 읽어오는 비동기 메서드이다.
get을 문서 참조에 호출할 때와 컬렉션 참조에 호출할 때 반환하는 결과를 비교해보자.
await DocumentReference.get()
기본적으로 get 메서드를 호출하면 프로미스를 반환하며, 이 프로미스가 이행 상태(fulfilled)가 되면 await을 통해 DocumentSnapshot 객체를 반환받을 수 있다.
DocumentSnapshot 객체는 Firestore 문서 하나의 스냅샷(복사본)을 표현하는 객체로서 다음과 같은 속성과 메서드로 이루어져 있다.
| 속성/메서드 | 설명 |
|---|---|
.exists | 문서가 존재하면 true, 없으면 false |
.id | 문서의 ID (예: "user123") |
.ref | 이 snapshot의 참조 (DocumentReference 객체) |
.data() | 문서의 모든 데이터를 JS 객체로 반환 (문서가 없으면 undefined) |
.get(fieldPath) | 특정 필드 값만 가져옴 (문서가 없거나 필드가 없으면 undefined) |
.createTime | 문서가 처음 생성된 시간 (Timestamp 객체) |
.updateTime | 마지막으로 수정된 시간 |
.readTime | 이 snapshot이 읽힌 시간 (쿼리 실행 시점) |
이러한 속성과 메서드들을 통해 문서의 데이터와 여러 메타데이터들을 참조할 수 있다.
await CollectionReference.get()
문서 참조에 호출할 경우와 마찬가지로 프로미스를 반환하며, 이행 상태가 되면 QuerySnapshot 객체를 반환한다.
컬렉션은 여러 개의 문서들로 구성되어 있다. 따라서 QuerySnapshot 객체는 문서를 나타내는 여러 개의 DocumentSnapshot 객체들을 포함한다. 주요 속성과 메서드는 다음과 같다.
| 속성/메서드 | 설명 |
|---|---|
docs | DocumentSnapshot 객체들의 배열 |
forEach() | 각 문서에 대해 반복 수행 |
empty | 쿼리 결과가 비었는지 (true 또는 false) |
size | 포함된 문서 수 (숫자) |
이러한 속성과 메서드드를 통해 문서 수와 같은 컬렉션에 대한 정보를 파악할 수 있고, 문서들을 순회할 수 있다.