addSnapshotListener以仅获取Firebase集合中的更改

问题描述 投票:0回答:2

我已经添加了addSnapshotListener,例如:

            doc?.reference.collection("thread")
                .order(by: "created", descending: true)
                .addSnapshotListener(includeMetadataChanges: true, listener: { (threadQuery, error) in

            if let error = error {
                print("Error: \(error)")
                return
            } else {
                //print(threadQuery?.documents.count)
                    for message in threadQuery!.documents {
                        self.removeAllOverlays()
                        print("Data: \(message.data())")
                    }
            }
            })

每次将新文档添加到thread时,它将加载完整线程。如何仅获取thread集合中添加的新文档?

swift firebase google-cloud-firestore listener
2个回答
0
投票

据此answer,您现在不能这样做。每次它将为您提供整个文档。

提示:如果需要此功能,请使用Firebase Real-time database


0
投票

为了简单起见,假设有这样的用户集合

users
   doc_0
      name: "Pete"
   doc_1
      name: "Lewis"
   doc_2
      name: "Clark"

以下代码将观察者附加到用户节点,并在添加,修改或删除用户时通知我们。注意,在第一次运行时,它将遍历每个用户,一次迭代并添加.fire,这将使您可以初始填充一个数组。

func observeUserChanges() {
    let usersCollectionRef = self.db.collection("users")
    usersCollectionRef.addSnapshotListener { querySnapshot, error in
        guard let snapshot = querySnapshot else {
            print("Error fetching snapshots: \(error!)")
            return
        }

        snapshot.documentChanges.forEach { diff in
            let userName = diff.document.get("name") as? String ?? "No Name"
            if (diff.type == .added) {
                print("Added user: \(userName)")
            }
            if (diff.type == .modified) {
                print("Modified user: \(userName)")
            }
            if (diff.type == .removed) {
                print("Removed user: \(userName)")
            }
        }
    }
}

第一次运行时输出此>

Added user: Pete
Added user: Lewis
Added user: Clark

然后添加新用户时,我们会看到此

Added user: Ted

删除Ted时]

Removed user: Ted
© www.soinside.com 2019 - 2024. All rights reserved.