火力基地。如何在 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):无法读取未定义的属性“映射”? (反应火力基地)

火力基地 |在functions.pubsub.schedule onRun上获取RemoteConfig值时出错

如何在我的微调器中使用 getItemAtPosition 从谷歌地图中的火力基地使用 android studio