Firestore侦听器正在获取比现有文档数更多的数据

时间:2019-03-23 03:58:21

标签: ios swift google-cloud-firestore

我正在从Firestore中获取数据并设置侦听器。数据存储在一个数组中,以后可在API调用中使用。我只想向该数组添加新数据。我已经设置了仅用于“添加”对文档所做更改的侦听器。

这是我到目前为止所执行的:

        db.collection("name").whereField("id", isEqualTo: id).addSnapshotListener({ (querySnapshot, error) in
            guard let snapshot = querySnapshot else { return }

            snapshot.documentChanges.forEach({ (change) in
                if change.type == .added {
                    do {
                        for document in snapshot.documents {
                            // decode method code is shown below
                            let object = try document.decode(as: Object.self)
                            self.objectArray.append(object)
                        }
                    } catch {
                        print(error)
                    }
                }
            })
        })

解码方法

func decode<T: Decodable>(as objectType: T.Type, includingId: Bool = true) throws -> T {

        var documentJson = data()
        if includingId {
            documentJson?["id"] = documentID
        }

        let documentData = try JSONSerialization.data(withJSONObject: documentJson, options: [])
        let decodedObject = try JSONDecoder().decode(objectType, from: documentData)

        return decodedObject
    }

对于我的测试数据,我在Firestore集合中只有10个文档,但是在第一次读取时,数组最终包含100个对象。

应该为10,并且每次在该Firestore集合上发生写入时,都只会附加新数据。

1 个答案:

答案 0 :(得分:1)

您正在同一循环中循环snapshot.documentChangessnapshot.documents。我不确定您要使用这些嵌套循环来完成什么,但是对我来说这没有任何意义。如果您想知道查询返回了多少文档,只需查看snapshot.documents,因为它将包含整个文档集。