Firestore,检测添加到集合中的新文档等
Posted
技术标签:
【中文标题】Firestore,检测添加到集合中的新文档等【英文标题】:Firestore, detecting a new document added to a collection, and more 【发布时间】:2019-04-29 07:00:11 【问题描述】:收听 Firestore 文档上的文档更改非常简单且效果很好。
我想知道是否有任何方法可以在添加/更新/删除属于该集合的文档时收到通知。
到目前为止,我们可以知道发生在一个已知文档上的所有事情,但是当然,如果它是一个新文档,我们肯定无法提前在该文档上创建一个侦听器。此外,即使我们能够提前知道新文档的 ID,很明显,创建与集合中的文档一样多的侦听器绝对是一种不好的做法。
我的问题不是针对任何语言,而是针对我正在使用颤振的信息。
Firestore 生态系统是否提供了实现这一目标的方法?提前致谢。
【问题讨论】:
【参考方案1】:如果是新文档,我们肯定无法在该文档上预先创建监听器
这不是真的。您可以构造一个查询,将在该文档存在之前生成该文档。该查询的侦听器将在创建文档的事件中显示添加的文档,并且还满足查询的约束。
我不知道 Flutter 是否有很好的文档,但the core documentation for realtime updates 展示了如何在查询结果更改时获取快照更改。请注意,您可以检查生成的查询快照,以查找自上次交付给侦听器的快照以来已添加、删除或更改的文档。
诀窍是提出一个查询,告诉您您想知道什么。您必须使用足够的信息填充文档,以便听众可以知道它是刚刚创建的感兴趣的文档。
【讨论】:
谢谢,我认为你让我走上了正确的道路。我有类似的东西:集合'信使'>文档'对话'>集合'线程'>文档'消息'。 'thread' 有一个属性 'users',它是一个包含 2 个用户 uid 的数组。我的查询是按用户数组内的用户 ID 过滤的,我的目的是在线程上进行任何更改。现在,我有: fb.collection('messages').where('users', arrayContains: uid).snapshots() 我绝对不确定是否可以构建一个能够检测到更改的查询在单个消息上,添加了一条消息 满足该查询的新文档将在查询快照中显示为“已添加”。您应该能够在侦听器中检测到这一点。 不幸的是,情况似乎并非如此,我尝试了 id 并且只收到有关父集合更改的通知。请注意,我实际上有一个包含文档的集合,其中包含包含文档的集合。我的临时解决方法是在父集合中添加一个“lastupdated”字段,并在创建消息后立即更新该字段,然后我可以观察集合本身并且我知道发生了变化。 您肯定会因为新添加的集合中的文档而被召回。如果没有看到您的特定代码和数据库结构,就无法说出发生了什么。但是,您所说的“父集合”这一事实使我相信您可能期望文档出现在查询中,而该查询并未查看它所针对的集合。一个查询一次只能查看一个集合。查询不会考虑匹配文档的“父集合”。 "一个查询一次只能查看一个集合。"这是我不确定的事实。对不起,如果我的问题不清楚。正如您猜到的那样,我试图检测子集合中发生的每一个变化。更准确地说:我的结构是这样的:集合 A > 文档 > 集合 B > 文档。我的目的是了解在 A 中创建的新文档和在 B 集合中创建的新文档。现在,感谢您的回答,我知道这是不可能的,所以我将保持我的解决方法。非常感谢您对 Doug 的赞赏帮助!以上是关于Firestore,检测添加到集合中的新文档等的主要内容,如果未能解决你的问题,请参考以下文章
如何在swift ui中使用autoid将带有字段的新文档添加到firebase集合
如何将子集合添加到 Firebase Cloud Firestore 中的文档
React setState未在firestore中执行添加文档承诺解析