我在做一个使用googlefirebaseforestore的项目。
我想在搜索用户时实现一个过滤器。想象一下,使用用户可以选择的复选框只搜索活动用户。
let db = Firestore.firestore()
let reference = db.collection("users").limit(to: 20)
//FILTER
if showOnlyActiveUsersBtn.isSelected {
reference.whereField("active", isEqualTo: true)
}
reference.getDocuments(completion: {(querySnapshot, error) in
.....
})
我希望这将返回的结果只有用户谁有字段“active:true”,但是,它返回的列表与查询没有过滤器。。。
如果我写得像:
let db = Firestore.firestore()
let reference = db.collection("users").limit(to: 20).whereField("active", isEqualTo: true)
reference.getDocuments(completion: {(querySnapshot, error) in
.....
})
它返回我首先期望的结果。
我不知道我的过滤器为什么不工作。
如何以用户友好的方式添加逻辑“和”条件?
最佳答案
Firestore查询对象是不可变的,这意味着它们在创建后永远不能修改。在代码中,您不会记住用whereField
构建的新查询。相反,您需要在现有查询的基础上构建新的查询对象,并记住新的查询对象:
let db = Firestore.firestore()
var reference = db.collection("users").limit(to: 20)
if showOnlyActiveUsersBtn.isSelected {
// build a new query using the old query, reassign to reference
reference = reference.whereField("active", isEqualTo: true)
}
reference.getDocuments(completion: {(querySnapshot, error) in
.....
})
如果您不喜欢使用
var
而不是let
,我相信您可以找到重新制作此示例的方法。无论如何,您需要记住whereField
返回的新查询,并使用它调用getDocuments
。关于swift - 如何使用swift有条件地向Firebase Firestore中的查询添加另一个过滤器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52130164/