【发布时间】:2021-11-17 08:06:11
【问题描述】:
我有一个 Firestore 查询,我需要它来监听新文档的创建,我尝试了很多可能性但无法使其工作,每次创建文档时都不会触发监听器。这是我的监听代码:
firestore
.collection("users")
.document("123")
.collection("images")
.whereField("postId", isEqualTo: "123")
.order(by: "createdAt", descending: true)
.limit(to: 1)
.addSnapshotListener { [weak self] snapshot, error in
guard let imageDocument = snapshot?.documents.first else {
return
}
// this print statement is only being called once (not being called when creating a new doc)
print(imageDocument)
}
...
这是我创建文档的查询:
firestore
.collection("users")
.document("123")
.collection("images")
.document()
.setData([
"postId": "123",
"imageUrl": "....",
"createdAt": Timestamp()
]) { error in
guard let error = error else { return }
print(error)
}
我的目标是当我在 Firestore 中创建新文档时触发此侦听器。
此外,如果我从侦听器查询中删除限制,代码可以工作,但我会花费大量不必要的读取。
【问题讨论】:
-
您是否可能没有在您描述的树中创建文档? IE里面的“users”集合、“123”文档、“images”集合等
-
@jnpdx 不,我正在正确创建。如果我删除限制,按升序排序并获取最后一个文档,它可以正常工作,但我不想不必要地花费 firestore 读取。
-
请编辑您的问题以显示您遇到问题的最小关闭/完成处理程序。至少
print的值,并向我们展示更新的代码及其有问题的输出。如果我们可以看到编写您希望在查询中看到的文档的代码,这可能也会有所帮助,这里的所有值都像您在查询中所做的那样(耶????)进行硬编码。 -
嘿@FrankvanPuffelen,感谢您的关注。我用创建查询更新了问题,希望对您有所帮助。
-
嗯....我没有立即看出那里可能出了什么问题。我希望其他人发现问题。
标签: ios swift firebase google-cloud-platform google-cloud-firestore