Слушатель Firestore извлекает больше данных, чем количество существующих документов - PullRequest
0 голосов
/ 23 марта 2019

Я получаю данные из 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
    }

Для моих тестовых данных у меня есть только 10 документов в коллекции Firestore, но массив в конечном итоге содержит 100 объектов при первом чтении.

Это должно быть 10, и каждый раз при записи добавляются только новые данныепроисходит в этой коллекции Firestore.

1 Ответ

1 голос
/ 23 марта 2019

Вы выполняете циклы над snapshot.documentChanges и snapshot.documents в пределах одного и того же цикла.Я не уверен, что вы пытаетесь достичь с помощью этих вложенных циклов, но для меня это не имеет никакого смысла.Если вы хотите узнать, сколько документов вернулось из запроса, просто посмотрите на snapshot.documents, так как он будет содержать весь набор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...