Firebase Firestore中有任何whereIn查询吗?

时间:2018-01-31 08:38:23

标签: firebase kotlin google-cloud-firestore

我想查找列表中包含电话号码的所有用户。 这就像从电子邮件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 替换它,我传递一个数组或一组值来匹配?

1 个答案:

答案 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")