火力基地。如何在 Node JS 中收听集合并获取最新修改文档的 ID?
Posted
技术标签:
【中文标题】火力基地。如何在 Node JS 中收听集合并获取最新修改文档的 ID?【英文标题】:Firebase. How can I listen to a collection and get the ID of the latest modified doc in Node JS? 【发布时间】:2022-01-23 08:05:56 【问题描述】:我们需要弄清楚如何检查 firebase 集合的更改,然后获取刚刚添加或删除的文档的 ID。
到目前为止我们做了什么。
目前,我们使用以下Node JS代码获取添加和删除文档的详细信息。 db.collection('collection').onSnapshot.then(snap => let changedDocs = snap._changes()
.
这种方法的问题是使用snap._changes()
的成本非常高,最终会耗尽我们项目的大量读取查询。对于我们的目标,是否还有其他替代解决方案?
【问题讨论】:
你的意思是db.collection('collection').get(...
吗?简洁的答案是在创建时添加时间戳并查询集合,按该日期排序。见***.com/questions/47967868/…
【参考方案1】:
查找“刚刚添加或删除”的文档的要求有点模糊。您必须根据 Firestore 对查询和侦听器的实际功能来确定您的问题描述。
Firestore 不保留有关何时添加、删除或删除文档的任何信息。这些操作只是发生。即使您有一个会触发这些更改之一的侦听器,您也不能保证您的回调会在该更改时立即被调用(因为您的应用可能在更改时处于脱机状态,或者遇到一些延迟,一段时间后收到回调)。
如果您添加一个包含该更改时间戳的字段,您可以做的是知道最新的添加或更新。您当然可以按该时间戳对查询进行排序,限制为第一个,然后只接收该文档。但是您可能会错过在您的听众会错过的同时发生的其他变化。
此外,您还会错过已删除的文档。已删除的文档不会显示在任何查询中。相反,您必须通过更改字段并在查询中使用该字段来将文档标记为已删除。
在不了解您的实际需求的情况下,很难说 Firestore 是否适合这项工作。您必须将您的要求映射到 Firestore 实际支持的查询中,并根据侦听器的工作方式了解您可能会丢失数据的情况。也许您最好使用发布/订阅队列将更改作为流处理,这样您就不会错过任何内容。
【讨论】:
以上是关于火力基地。如何在 Node JS 中收听集合并获取最新修改文档的 ID?的主要内容,如果未能解决你的问题,请参考以下文章
未处理的拒绝(TypeError):无法读取未定义的属性“映射”? (反应火力基地)