Я не совсем уверен, правильно ли я делаю это в 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
)
Моя гипотеза это потому, что я обновляю значение для индекса, который вызывает эту проблему. В этом случае есть ли обходной путь? Любая помощь приветствуется