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

带顺序和限制的Firestore复合查询

晏阳飙
2023-03-14
let ref = Firestore.firestore().collection("feedItems")
            .whereField("uid", isEqualTo: uid)
            .whereField("wasViewed", isEqualTo: false)
            .whereField("isResharedPost", isEqualTo: false)
            .whereField("story", isEqualTo: false)
            .whereField("createdAt", isGreaterThan: dateFilter as Any)
            .order(by: "createdAt", descending: false)
            .limit(to: 25)
        ref.getDocuments { (snapshot, err) in

我现在正在为stories添加选项,并希望查询相同的feedItems集合,其中story字段等于true

然而,在这种情况下,我还需要确保只获得不到24小时的对象。所以我希望我的查询有两个稍微不同的过滤器集

一个带有

        .whereField("story", isEqualTo: true)
        .whereField("postCreatedAt", isGreaterThan: storyFilter as Any)
        .whereField("story", isEqualTo: false)
        .whereField("createdAt", isGreaterThan: dateFilter as Any)
let ref = Firestore.firestore().collection("feedItems")
        ref
            .whereField("uid", isEqualTo: uid)
            .whereField("wasViewed", isEqualTo: false)
            .whereField("isResharedPost", isEqualTo: false)
            .whereField("story", isEqualTo: false)
            .whereField("createdAt", isGreaterThan: dateFilter as Any)
        ref 
            .whereField("uid", isEqualTo: uid)
            .whereField("wasViewed", isEqualTo: false)
            .whereField("isResharedPost", isEqualTo: false)
            .whereField("story", isEqualTo: true)
            .whereField("postCreatedAt", isGreaterThan: storyFilter as Any)
        ref.getDocuments { (snapshot, err) in

如果不可能合并,我将把它们分成两个单独的查询,然后依次调用。

共有1个答案

鲁博瀚
2023-03-14

Cloud Firestore中的单个查询只能对单个字段执行范围筛选(>=<=等)。由于您似乎希望在createdatpostcreatedat上进行筛选,这是不可能的。

另见:

>

  • 我对Firestore多范围查询的回答
  • 查询的Firebase文档,其中包含以下语句:

  •  类似资料:
    • Firestore文档称: 使用子句进行查询。在这种情况下,应该将查询拆分为大于查询和小于查询。例如,尽管不支持查询子句,但可以通过组合两个查询获得相同的结果集,一个查询使用子句,另一个使用子句。 我需要抓住用户在一定的年龄范围,所以这似乎是一个伟大的方式来抓住相关的,但不幸的是,我显然不明白如何使用这一点。 这不起作用,当我使用时,我会得到错误。 更新:显然他们没有专门的SWIFT文档。 我得到

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

    • 我有一个具有以下模式的待售项目集合: 我继承了一个聚合查询,它返回匹配类别的项目,按商家分组,组按组中的最大评级排序: 在此之后,代码继续按评级对每组中的项目进行排序,并删除除每组中排名前2位之外的所有项目。 作为聚合函数的一部分,是否可以在组内执行此排序和限制,以便聚合只返回每组中评级最高的两个项目?

    • 问题内容: 我有一个联合查询,它从两个不同的总体中获取计数。如何强制结果按查询中写入的顺序而不是升序/降序返回? 我希望第一个结果始终作为第一行返回。这可能吗? 问题答案: 您必须使用ORDER BY子句指定订单。在您的示例中,您可以执行以下操作:

    • 继我上一篇文章之后,我了解了个人收藏的写作限制 每秒500次写入一个收藏 这个500ps的限制如何适用于最近引入的集合组?(btw...托德在这里没有得到足够大的欢呼!: P) https://firebase.google.com/docs/firestore/query-data/queries#collection-组查询 Firestore限制仍然仅引用单个集合: https://fire

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