티스토리 뷰
우선 DB구조는
Users라는 루트 컬렉션에 각 유저 정보들을 담는 다큐먼트들이 있고,
유저 한 사람의 다큐먼트에 Posts 라는 하위 컬렉션을 생성하였다.
1. Document Path를 알 수 있는 방법
- parent 메서드 쓰기: CollectionReference를 통해 상위 DocumnetId와 CollectionId를 가져올 수 있다.
document.reference.parent.parent?.getDocument { snapshot, error in
if let snapshot {
for documentTest in snapshot.document {
print(snapshot)
print(snapshot.documentID)
}
}
}
document.reference.parent.parent?.getDocument { snapshot, error in
if let snapshot {
print(snapshot)
print(snapshot.documentID)
}
}
document.reference.parent.parent?.parent.getDocuments { snapshot, error in
if let snapshot {
for documentTest in snapshot.documents {
print(documentTest)
print(documentTest.documentID)
}
}
}
document.reference.parent.parent?.parent.parent?.getDocument { snapshot, error in
if let snapshot {
print(snapshot)
print(snapshot.documentID) // Users의 DocumentId 값을 꺼낼 수 있다.
}
}
// 짜놓은 DB 구조에 따라 parent로 상위 컬렉션과 documentId를 찾는 것은 다르겠지만
// DocumentID -> CollectionID -> DocumentId -> CollectionId -> DocumentID -> <Root> CollectionID
// 이렇게 루트 컬렉션 ID와 그 사이사이 DocumentID들을 parent를 통해 쉽게 얻을 수 있다.
document.reference.parent.parent?.parent.parent?.parent.collectionID // Users
- 필드 값에 필요한 Id 값들을 들고 있게 한다.
예를 들면 내가 쓴 댓글을 수정하려면 게시글을 쓴 유저의 Id값, 해당 게시글의 Id값을 Comment에 다큐먼트 필드로 저장해주는 것이다.
Comment 컬렉션
- 다큐먼트 Id
- 게시글을 쓴 유저의 Id
- 해당 게시글의 Id
- 댓글 단 사람의 Id
2. 컬렉션 Firestore의 색인(인덱스)이란?
- Firestore는 기본적으로 모든 document의 field들을 자동적으로 인덱싱한다. 원하는 문서를 빠르게 찾기 위해 인덱스라는 기능을 제공한다. Firestore 인덱스를 통해 쿼리 조건에 해당하는 문서들을 가져온다. 단일 필드 색인의 경우 Firebase에서 자동으로 관리해주기 때문에 직접 생성해줄 필요가 없다.
원하는 데이터를 조회할 때 없으면 파이어 베이스에서 추가하라고 친절하게 링크를 보여준다.
하지만 컬렉션 그룹에서는 단일 필드 자동 색인 설정에 대한 쿼리를 기본적으로 제공해주지 않는다.
쿼리 결과의 link를 눌러 만들라고 가이드해주는 대로 만들면 금방 색인이 생긴다.
저 link를 누르고 파베에 가입되어 있는 Gmail을 선택해주면 아래 화면이 뜬다.
저장을 눌러주면 수 분내로 색인이 설정된다.
각 필드와 맵의 각 하위 필드에 대한 단일 필드 색인을 자동으로 유지한다.
3. 컬렉션 그룹은 단일 필드 자동 색인 설정이 왜 제공 안되는 지
공식 문서에 기본적으로 유지(maintained)되지 않는다고 쓰여있다.
왜인지는 모르겠음...
'Firebase' 카테고리의 다른 글
Firebase - Firestore로 데이터 구조 짜는 법, 근데 이제 RDBMS와 NoSQL을 곁들인. (0) | 2022.12.23 |
---|