ios - 具有顺序和限制的 Firestore 复合查询

标签 ios swift firebase google-cloud-firestore

我想查询我的 firestore 数据库中的一个集合

我想查询以获取当前用户提要的所有帖子。 我目前这样做是这样的

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

我现在添加故事选项,并希望查询同一集合中故事字段等于 true 的 feedItems

但是在这种情况下,我还需要确保只获取 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

在尝试弄清楚如何处理在何处以及如何涉及订单和限制之前,我收到错误无效或权限不足

如果无法合并,我会将它们分成两个单独的查询,这两个查询将按顺序调用。

最佳答案

Cloud Firestore 中的单个查询只能对单个字段执行范围过滤器( >=<= 等)。因为您似乎想同时过滤 createdAtpostCreatedAt ,这是不可能的。

另请参阅:

关于ios - 具有顺序和限制的 Firestore 复合查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57947567/

相关文章:

ios - 时间格式包含冒号(:) Not supported by iOS 12. 2

ios - 尝试以编程方式制作具有嵌套 Stack View 的网格

android - 无法在 Firebase 的 Android Codelab 中解析符号 default_web_client_id

ios - 在使用 Storyboard 和 segue 时打开它之前选择 tabbarcontroller 的默认选项卡

ios - UIScrollView 委托(delegate)方法 scrollViewWillEndDragging : not working?

json - 如何使用 Swift 4.2 正确编码 JSON 响应?

objective-c - Objective-C 枚举 : how to get rid of them? 的新 Swift 5 警告

ios - requestTestAccountTokensWithArraysOfPermissions FBSDK 4.x 版本

firebase - Fire Storage Exception([firebase_storage/unauthorized] 用户无权执行所需的操作。)(我的规则是允许读/写)

javascript - 使用 AngularJs 在 firebase 中创建用户