使用!=子句查询 . 在这种情况下,您应该将查询拆分为大于查询和小于查询 . 例如,虽然不支持查询子句(“age”,“!=”,“30”),但是可以通过组合两个查询来获得相同的结果集,其中一个查询子句在哪里(“age”,“< “,”30“)和一个条款(”年龄“,”>“,30) .
我需要 grab 一定年龄段的用户,所以这似乎是 grab 相关用户的好方法但不幸的是,我显然不明白如何使用它 .
let potentialMatchesRef = db.collection("users")
.whereField("isBanned", isEqualTo: false)
.whereField("isHidden", isEqualTo: false)
.whereField("location.country", isEqualTo: user.location.country)
potentialMatchesRef
.whereField("age", isGreaterThanOrEqualTo: user.preferences.ageRange.from)
.whereField("age", isLessThanOrEqualTo: user.preferences.ageRange.to)
这不起作用,当我使用 where("age", ">", 30)
时,我收到错误 Value of type 'Query' has no member 'where'
.
更新:显然他们没有专门的Swift文档 .
如果我用这个
let potentialMatchesRef = db.collection("users")
.whereField("isBanned", isEqualTo: false)
.whereField("isHidden", isEqualTo: false)
.whereField("location.country", isEqualTo: user.location.country)
.whereField("age", isLessThanOrEqualTo: to)
.whereField("age", isGreaterThanOrEqualTo: from)
我收到错误 Error getting documents: Error Domain=FIRFirestoreErrorDomain Code=9 "The query requires an index.
有至少2个字段,我不能写两个年龄 . 拜托,有人可以帮忙 .
1 回答
当文档说你可以“组合两个查询”时,这意味着你应该制作两个完全不同的查询,分别执行它们,并在客户端上组合结果以得出最终的文档集 .
您要做的是使用两个过滤年龄的子句进行单个查询 . 这不起作用,因为单个查询中的所有条件都是逻辑AND(在Firestore中当前没有逻辑OR查询) . 以这种方式思考 - “年龄> 30且年龄<30”的文档集总是会产生0个文档,因为任何年龄值都不能满足这两个要求 .