当前位置: 首页 > 知识库问答 >
问题:

Firestore中的复合查询

公冶智刚
2023-03-14

Firestore文档称:

使用!=子句进行查询。在这种情况下,应该将查询拆分为大于查询和小于查询。例如,尽管不支持查询子句WHERE(“age”,“!=”,“30”),但可以通过组合两个查询获得相同的结果集,一个查询使用子句WHERE(“age”,“<”,“30”),另一个使用子句WHERE(“age”,“>”,30)

我需要抓住用户在一定的年龄范围,所以这似乎是一个伟大的方式来抓住相关的,但不幸的是,我显然不明白如何使用这一点。

    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)时,我会得到错误类型'query'的值没有成员'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)

我得到错误获取文档时出错:错误域=FirFireStoreErrorDomain Code=9“查询需要索引。

有至少2个字段,我不能写年龄在两个。拜托,有人能帮忙吗。

共有1个答案

宗政功
2023-03-14

当文档说明您可以“组合两个查询”时,这意味着您应该进行两个完全不同的查询,分别执行它们,并在客户机上组合结果以得到最终的文档集。

您要做的是使用两个子句进行查询,根据年龄进行筛选。这是行不通的,因为一个查询中的所有条件在逻辑上是一起的(目前Firestore中没有逻辑上的OR查询)。这样考虑一下-“年龄>30和年龄<30”的文档集总是生成0个文档,因为任何年龄值都不能满足这两个要求。

 类似资料:
  • null 我认为这会起作用,因为它表示获取文档,其中user1等于“Alex”或“Adam”,user2等于“Adam”或“Alex”。但是在一个查询中不能多次使用in筛选器。我怎么才能让它工作? 以下是我的Firestore数据库的截图:

  • 我现在正在为stories添加选项,并希望查询相同的feedItems集合,其中story字段等于true 然而,在这种情况下,我还需要确保只获得不到24小时的对象。所以我希望我的查询有两个稍微不同的过滤器集 一个带有 如果不可能合并,我将把它们分成两个单独的查询,然后依次调用。

  • 我正在尝试根据一个集合中保存的数据从另一个集合中检索数据。如果我的考勤集合中的userUID等于我的学生集合中的userUID,我将检索学生的名称。这可能吗?

  • 我想我读到您可以使用新的Firebase Firestore查询子集合,但我没有看到任何示例。例如,我以以下方式设置了Firestore: 舞蹈[收藏] DanceName 歌曲[收藏] 松南 我如何才能查询“查找所有的舞蹈在songName=='x'”