首页 文章

Firestore中的复合查询

提问于
浏览
1

Firestore documentation说:

使用!=子句查询 . 在这种情况下,您应该将查询拆分为大于查询和小于查询 . 例如,虽然不支持查询子句(“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 回答

  • 1

    当文档说你可以“组合两个查询”时,这意味着你应该制作两个完全不同的查询,分别执行它们,并在客户端上组合结果以得出最终的文档集 .

    您要做的是使用两个过滤年龄的子句进行单个查询 . 这不起作用,因为单个查询中的所有条件都是逻辑AND(在Firestore中当前没有逻辑OR查询) . 以这种方式思考 - “年龄> 30且年龄<30”的文档集总是会产生0个文档,因为任何年龄值都不能满足这两个要求 .

相关问题