2023. 10. 19. 09:33ㆍ카테고리 없음
https://firebase.google.com/docs/firestore/query-data/queries?hl=ko
Cloud Firestore에서 단순 쿼리 및 복합 쿼리 실행 | Firebase
Demo Day를 위해 일정을 비워두고 Firebase의 새로운 소식과 기능들을 확인해 보세요. 자세히 알아보기 의견 보내기 Cloud Firestore에서 단순 쿼리 및 복합 쿼리 실행 컬렉션을 사용해 정리하기 내 환경
firebase.google.com
공식문서를 참조하였습니다.
앞서 말해두었다 싶이 파이어베이스에서는 데이터베이스에 데이터들을 저장 할 수 있는 편안한기능들을 제공한다.
하지만 저장만 할 수 있으면 메모장에 적어둔거와 다를 게 없다.
이걸 어떻게 꺼내 올 수 있을까?
바로쿼리문이 있었다. 많은 종류의 쿼리문이 있는데 알아보자.
val cities = db.collection("cities")
val data1 = hashMapOf(
"name" to "San Francisco",
"state" to "CA",
"country" to "USA",
"capital" to false,
"population" to 860000,
"regions" to listOf("west_coast", "norcal"),
)
예시
val query = citiesRef.whereEqualTo("state", "CA")
이 쿼리는 state값이 ca인 문서를 반환한다.
이후 get을 통해 가져온다.
val docRef = db.collection("cities").document("SF")
docRef.get()
.addOnSuccessListener { document ->
if (document != null) {
Log.d(TAG, "DocumentSnapshot data: ${document.data}")
} else {
Log.d(TAG, "No such document")
}
}
.addOnFailureListener { exception ->
Log.d(TAG, "get failed with ", exception)
}
그러면 log창에 가져온 데이터 들이 뜬다.
나는 가져온 데이터들을 변수로 가져오고싶어!
val docRef = db.collection("cities").document("SF")
docRef.get()
.addOnSuccessListener { document ->
if (document != null) {
val data = document.data
if (data != null) {
val cityName = data["name"]
val population = data["population"]
} else {
Log.d(TAG, "Document is empty")
}
} else {
Log.d(TAG, "No such document")
}
}
.addOnFailureListener { exception ->
Log.d(TAG, "get failed with ", exception)
}
그냥 변수에 저장하면 끝이다.
이 쿼리문의 종류들을 살펴보자
여기서 where을 if(조건요청)이라고 보면 편하다.
val query = citiesRef.whereNotEqualTo("name", "San Francisco")
난 name필드에 San Francisco와 일치하지 않는 데이터들을 쓰고싶어 (whereNot== !if)
val query = citiesRef.whereGreaterThan("population", 1000000)
.whereLessThan("population", 2000000)
난 인구수가 십만보다 많고 이십만보다 작은 문서들을 가져와 쓰고싶어!
여기에 뒤에 OrEqualTo를 추가해주면 whereGreaterThanOrEqualTo, whereLessThanOrEqualTo
-> 십만이상 십만이하이다.
val keyword = "Park"
val query = citiesRef.whereArrayContains("keywords", keyword)
'파크'라는 키워드가 포함된 문서들을 가져오고 싶어!
val query = citiesRef.whereArrayContainsAny("categories", listOf("food", "shopping"))
저 리스트중에 값이 하나라도 포함되는 문서들의 데이터를 가져오고싶어!
val query = citiesRef.orderBy("population")
val query = citiesRef.orderBy("population", Query.Direction.DESCENDING)
val query = citiesRef.orderBy("state").orderBy("population", Query.Direction.DESCENDING)
오름차순 정렬(기본값)
내림차 순 정렬
state에 대해서는 오름차순,population에 대해서는 내림차순(복합정렬)
여기서도 여러가지 정렬이 또 있다.
val query = citiesRef.orderBy("population").startAt(1000000)
val query = citiesRef.orderBy("population").startAfter(1000000)
val query = citiesRef.orderBy("population").endBefore(1000000)
val query = citiesRef.orderBy("population").endAt(1000000)
차례대로
난 인구수 일정 이상의 문서들을 가져오고 싶어!
난 인구수 일정 초과의 문서들을 가져오고 싶어!
난 인구수 일정 이하의 문서들을 가져오고싶어!
난 인구수 일정 미만의 문서들을 가져오고 싶어!
val query = citiesRef.limit(5)
문서가 너무 많아서 5개만 가져오고싶어!
위에정렬과 조합도가능하다.
citiesRef.orderBy("population", Query.Direction.DESCENDING).limit(5)
인구수5위까지의 문서들을 가져오고싶어!
이 외에도 많이 있지만 이것들이 보편적으로 쓰이는거같다.