Firestore addSnapshotListener не удалось прослушать обновление документа при обновлении значения индекса - PullRequest
0 голосов
/ 14 апреля 2020

Я не совсем уверен, правильно ли я делаю это в Firebase в Swift. Скажем, я храню некоторую дату в коллекции под названием «temp» и пытаюсь прослушать любое обновление документа. Каждый документ имеет несколько полей. Например, одно поле - userId, а другое - updateTs. Чтобы запросить самые последние документы, мой слушатель выглядит так:

messageListener = Firestore.firestore().collection("temp")
                .whereField("userId", isEqualTo: "\(userId)")
                .whereField("updateTs", isLessThan: lastUpdateTs)
                .order(by: "updateTs", descending: true)
                .limit(to: 20)
                .addSnapshotListener { querySnapshot, error in
                    guard let snapshot = querySnapshot else {
                        return
                    }
                    for i in 0..<snapshot.documentChanges.count {
                        var change = snapshot.documentChanges[i]
                        // do things herer
                        if (change.type == .added) { print("added") }
                        if (change.type == .removed) { print("removed") }
                        if (change.type == .modified) { print("modified") }
                    }
                }

Поскольку я выполняю запросы, используя whereField и order, мне нужно создать составной индекс (userId + updateTs).

При первоначальном запуске все работает хорошо, однако, когда я пытаюсь обновить значения в поле updateTs, пока поле userId не изменяется, используя

let messageData: [String: Any] = ["userId": userId, "updateTs": updateTs]
Firestore.firestore().collection("temp").document(thisDocument).updateData(messageData)

Приведенный выше слушатель идентифицирует указанное выше изменение как removed вместо modified, и после того, как слушатель впервые увидит изменение, он больше не сможет наблюдать изменение (вероятно, из-за того, что оно было идентифицировано как removed)

Моя гипотеза это потому, что я обновляю значение для индекса, который вызывает эту проблему. В этом случае есть ли обходной путь? Любая помощь приветствуется

1 Ответ

1 голос
/ 15 апреля 2020

Какое значение updateTs установлено в документе?

Я предполагаю, что вы устанавливаете updateTs на значение больше lastUpdateTs. В этом случае обновленный документ больше не соответствует вашему запросу и удаляется из результатов запроса. Таким образом, это означает, что change.type равно .removed, поскольку документ был удален из результатов запроса.

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