Data Struct
class Diary {
id: string | null
userID: string
plantID: string
writtenAtMs: number
latestUpdatedAtMs: number
memo: string
imageURLs: string[]
}
TypeScript
복사
Firestore
예제
•
특정 유저만 필터링
•
writtenAtMs 에 range를 설정하여 Diary 목록을 추출
•
writtenAtMs 를 기준으로 내림차순
firebaseFirestore
.collection(FirestoreKey.Diaries)
.where('userID', '==', userID) // userID 로 필터링
.where('writtenAtMs', '>=', startAtMs)
.where('writtenAtMs', '<=', endAtMs)
.orderBy('writtenAtMs', 'desc')
.get()
TypeScript
복사
Trouble Shooting
Error: 9 FAILED_PRECONDITION: The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/plant-butler-staging/firestore/indexes?create_composite=ClRwcm9qZWN0cy9wbGFudC1idXRsZXItc3RhZ2luZy9kYXRhYmFzZXMvKGRlZmF1bHQpL2NvbGxlY3Rpb25Hcm91cHMvZGlhcmllcy9pbmRleGVzL18QARoKCgZ1c2VySUQQARoPCgt3cml0dGVuQXRNcxACGgwKCF9fbmFtZV9fEAI
TypeScript
복사
Firestore에서 검색(where), 정렬(orderBy)를 하기 위해서는 색인이 생성되어 있어야 한다. 색인 생성방법은 고민할 필요 없다.색인이 생성되지 않아 발생한 오류에 색인 생성을 위한 주소를 던져준다.
이 주소를 그대로 웹 브라우저에 복붙해 넣으면 아래와 같이 설정 화면이 뜨고, “색인 만들기” 버튼을 눌러주자. 그리고 색인이 완성될때까지 기다린 후 쿼리를 재실행한다.
색인이 완성되는데 걸리는 시간은 색인의 종류와 기존 데이터의 크기에 따라 달라진다.