Reference? Qurey? Snapshot?
다음과 같은 도표를 참고하면 쉽게 이해할 수 있다.
Collection
Collection에서는 크게 3가지 방향으로 갈린다.
1-1. Query
.orderBy(), where().. 을 통해서 Query를 만들고
.get()을 통해 서버통신으로 데이터를 가져온다. (.get()은 데이터를 한번만 가져오라는 Query이다)
=> Return 값은 QuerySnapshot
1-2. snapshot()
이 내용은 Real-time Read를 위한 Stream을 받아오는 함수이다.
=> Return 값은 Stream<QuerySnapshot> 이다.
1. QuerySnapshot => snapshot() 사용할 때
Collection으로 부터 Query, snapshot을 통해 받아온 데이터 타입이다.
사실상 Snapshot은 비동기로 실제 서버 데이터를 가져온 내용물이다.
Collection으로 부터 특정 Doucment들을 가져왔기에 하나씩 까봐야한다.
1.1. docs
QuerySnapshot의 내부 데이터 리스트에 접근한다.
⇒ Return 값은 List<QueryDocumentSnapshot>이다.
2. QueryDocumentSnapshot => get() + docs 사용할 때
사실상 DocumentSnapshot과 같은 내용이다. DocumentSnapshot을 상속받았다.
왜 굳이 따로 만들었는지는 Class에 주석으로 친절하게 나와있다.
1. DocumentSnapshot과 다르게 항상 exists 가 true이다.
2. data()가 절대 null을 반환하지 않는다.
2.1. data()
실제 데이터가 들어있으며 Map<String, dynamic>형태로 넘어온다.
2.2. reference
Snapshot을 받아 올 수 있는 DocumentRefernce를 반환해준다.
QueryDocumentSnapshot은 기본적으로 DocumentSnapshot을 상속했기 때문에 똑같이 동작한다.
1-3. doc()
특정 documentId를 통해 단일의 document에 접근한다.
아직 서버 통신을 하는 상태는 아니고 접근할 document의 reference를 반환해준다.
=> Return 값은 DocumentReference 이다.
3. DocumentSnapshot -> doc(docid).get()
실제 Document의 데이터가 들어있는 객체이다.
3.1. data()
실제 데이터가 들어있으며 Map<String, dynamic>형태로 넘어온다.
실제 데이터를 받아올 수 있다.
3.2. reference
Snapshot을 받아 올 수 있는 DocumentRefernce를 반환해준다.
QueryDocumentSnapshot은 기본적으로 DocumentSnapshot을 상속했기 때문에 똑같이 동작한다.
3.3. data['Id'] -> Map 형태이므로 접근 가능.
각각의 변수들을 불러올 수 있다.
4. DocumentReference
DocumentReference에는 기본적인 동작들이 들어있다.
4.1. set( data )
document의 내용을 넘어온 data로 대체해버린다.
4.2. update( data )
data로 넘어온 특정 field의 값을 update한다.
4.3. delete( docId )
document를 삭제한다.
4.4. collection('collection_name')
내부 collection을 호출한다 혹은 생성한다.
4.5. get()
Future이다. 즉 서버통신을 통해 DocumentSnapshot() 데이터를 가져온다.
'Flutter > Firebase' 카테고리의 다른 글
[FIREBASE] IOS, Android Firebase ERROR 없이 한번에 연결하기 (0) | 2021.11.30 |
---|---|
[Firebase] Firebase Storage (0) | 2021.11.20 |
[Firebase] Firebase usage example (0) | 2021.11.19 |
[Firebase] IOS 연결하기 (0) | 2021.11.10 |
[Firebase] Android 연결하기 (0) | 2021.11.03 |