首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firestore SnapshotListener在使用多个条件时停止更新数据

问Firestore SnapshotListener在使用多个条件时停止更新数据
EN

Stack Overflow用户
提问于 2021-05-23 04:09:41
回答 1查看 21关注 0票数 0

我在我的SwiftUI应用程序中有一个存储库,可以从Google Cloud Firestore抓取特定用户的所有操作。它使用快照侦听器使操作列表保持最新。

我想通过在我的代码中添加下面这行代码来更改查询,以便将结果限制在尚未完成的操作中:

代码语言:javascript
复制
.whereField("completed", isEqualTo: false)

下面是它被添加到的函数,它创建侦听器并将其设置为存储库中的"actions“变量:

代码语言:javascript
复制
    func loadData() {
        let userId = Auth.auth().currentUser?.uid
        
        if userId != nil {
            self.listener = db.collection("action")
                .order(by: "createdTime")
                .whereField("userId", isEqualTo: userId!)
                .whereField("completed", isEqualTo: false)
                .addSnapshotListener { (querySnapshot, error) in
                    if let querySnapshot = querySnapshot {
                        self.actions = querySnapshot.documents.compactMap { document in
                            do {
                                let x = try document.data(as: Action.self)
                                return x
                            }
                            catch {
                                print(error)
                            }
                            return nil
                        }
                    }
                }
        } else {
            return
        }
    }

但一旦我添加了它(我有一个userId的索引,但不是完成的,如果这很重要的话),它会在第一次正确加载数据,但当我添加或更改现有操作时,视图不会更新,直到我退出并重新打开应用程序。

对于一个快照监听器,有多个这样的条件有什么问题吗?或任何其他会导致此侦听器不再获得动态更新的内容?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-23 04:15:14

您需要为多个查询创建复合索引

How to create compound queries

您可以阅读firebase文档的复合查询部分。创建复合查询需要一些时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67653746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档