我想查找列表中包含电话号码的所有用户。
这就像从电子邮件IN phone_numbers中搜索*
。
这就是我在做的事。
fun getUsers(persons: List<Person>?): Single<List<User>> {
return Single.create({ emitter ->
try {
val db = FirebaseFirestore.getInstance()
val userCollection = db.collection(USER_FIREBASE_TABLE)
var query: Query? = null
persons?.forEach({ person ->
query = if (null == query) userCollection
.whereEqualTo("phone", person.phone)
else query!!.whereEqualTo("phone", person.phone)
})
query?.get()?.addOnCompleteListener({ task: Task<QuerySnapshot> ->
emitter.onSuccess(task.getResult().toObjects(User::class.java))
})
} catch (exception: Exception) {
exception.printStackTrace()
emitter.onError(exception)
}
})
}
如您所见,我每次都会向查询附加 whereEqualTo 。有没有办法用 whereIn 替换它,我传递一个数组或一组值来匹配?
答案 0 :(得分:1)
https://firebase.google.com/docs/firestore/query-data/queries#compound_queries
您也可以使用相同的运算符链接多个where():
citiesRef.whereEqualTo("state", "CA").whereEqualTo("state", "CO");...
此外,您只能在单个字段上执行范围比较(&lt;,&lt; =,&gt;,&gt; =):
citiesRef.whereGreaterThanOrEqualTo("state", "CA").whereLessThanOrEqualTo("state", "IN")