如何在代码中为Firestore调用动态添加whereField查询条件
错误原因
db.collection("myDocument") 生成的是 CollectionReference 类型实例,而 whereField 方法的返回值为 Query 类型,二者类型不匹配,导致赋值编译报错。CollectionReference 本身属于 Query 的子类,只要将存储查询的变量显式声明为 Query 类型即可兼容所有过滤操作。
正确实现代码
var queries = ["key1": 0, "key2": 1] let db = Firestore.firestore() // 显式声明为Query类型,兼容后续过滤返回结果 var query: Query = db.collection("myDocument") for (key, value) in queries { query = query.whereField(key, isEqualTo: value) } let snapshot = try? await query.getDocuments()
补充说明
- 该写法支持任意数量的
whereField条件叠加,也兼容order(by:)、limit(to:)等其他查询条件的批量添加 - 若需要对不同字段使用不等于、范围查询等其他匹配规则,可将查询条件的封装粒度进一步细化,例如存储为包含字段名、匹配规则、匹配值的结构体数组,循环内做规则判断后调用对应
whereField重载方法即可
内容的提问来源于stack exchange,提问作者Kevin McQuown
相关产品推荐
相关产品推荐

