问题标签 [changestream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
368 浏览

mongodb - MongoDB/Spring:订阅集合更改

我正在使用 Spring Boot 应用程序。我正在尝试为 MongoDB 中的集合修改实现基于回调的事件通知。我已经没有想法了,因为我尝试了以下方法:

  • 经典轮询 - 冗余,因为现有实现是由 UI 轮询的 REST 端点,它在其中查询数据。

  • Tailable Cursors - 需要对集合设置上限,这可能是一个限制,对于具有非常高存储预测的数据库来说是不够的。

  • 更改流 - 我收到运行时异常,指出存储引擎不支持“多数阅读关注”。 collection.watch(asList(Aggregates.match(Filters.in("operationType", asList("insert", "update"))))).forEach(printBlock);

我无权查看引擎配置,但我假设如果 DBA 不能将存储引擎更改为wiredTiger,那么我就不能使用更改流。这个对吗?还有其他解决方案吗?spring 的 mongodb-reactive API 怎么样?我的印象是 API 仍然依赖于可尾游标或更改流。

0 投票
0 回答
140 浏览

loopbackjs - 在 Loopback 3 中修改 ChangeStream 响应

首先,如果您不熟悉变更流,请阅读内容。

似乎,当用于构建lb应用程序时,会自动为模型创建更改流端点。我已经成功实现了一个更改流,在向我的Statement模型提交新模型实例时,更改会实时发送到所有连接的客户端。这很好用。

除了它只发送模型modelInstance的。Statement我还需要了解提交声明的用户。由于与我的用户模型StatementhasOne关系,我通常会使用includes过滤器进行查询。但我不是在这里进行查询……这不是变更流的工作方式。节点服务器将信息发送到客户端,而不会首先发送对该信息的任何查询。

我的问题是,如何在 Statement 模型中挂钩传出的更改流,以便我可以从用户模块中提取所需的数据?就像是:

这可以做到吗?如果是这样,怎么做?

0 投票
1 回答
2253 浏览

mongodb - 对于 MongoDB 更改流阅读器,什么是好的水平扩展策略?

我正在考虑实现一个 MongoDB 更改流阅读器,并且我想确保我做得正确。有很多关于如何实现实际阅读器代码的简单示例,包括官方文档,我不太担心它的这方面。

然而,我有点担心读者落后于变更流并且无法赶上,我想确保读者能够处理流程。

mongo 服务器是一个集群,为了争论,我们假设它在一天中的任何时候都很忙。考虑到它必须迭代流结果而不是像队列一样对其进行操作,更改流 API 似乎只与执行工作的单个实例兼容。因此,我担心迭代结果的单个实例可能需要更长的时间来完成其工作,而不是新项目被推入流中。

我的直觉是实际上让读者简单地阅读流,批量更改,然后将其推入队列,然后其他工作人员可以水平扩展以完成工作。但是,我仍然有一个实例作为读取器,并且理论上它仍然有可能落后于流,即使只做将更改推送到队列中的最低限度的工作。

所以我的问题是,这种担心有多现实?有没有办法以这样的方式创建阅读器,即使它只是将更改流式传输到工作队列中,它也可以水平扩展?我还应该考虑哪些其他因素?

0 投票
2 回答
3301 浏览

node.js - 如果数据库关闭一段时间,MongoDB 更改流超时

我在 nodejs 中使用 mongoDB 更改流,一切正常,但如果数据库关闭需要超过 10 5 秒才能启动更改流会引发超时错误,这是我的更改流观察器代码

但是在数据库端我已经处理了它,即如果数据库关闭或使用此代码重新连接

但是我无法处理更改流观察器以在数据库关闭时停止它并在重新连接数据库时重新启动它,或者是否有任何其他更好的方法可以做到这一点?

0 投票
1 回答
446 浏览

mongodb-compass - 使用 MongoDB Compass 编辑数据时未发布更改流

正如标题所暗示的,当我使用 MongoDB 指南针对数据进行更改时,更改不会发布在更改流中。我有一个侦听更改流的 Node.js 服务。

0 投票
1 回答
2410 浏览

mongodb - MongoDB 更改流中 resumeAfter 和 startAtOperationTime 之间的区别

在版本 4 中,MongoDB 更改流可以使用两个不同的参数来指定在哪里恢复更改流:(resumeAfter一些内部令牌)和startAtOperationTime时间戳类型。

是否可以通过使用在每个更改事件中找到的安全恢复更改流来完全替换resumeAfterstartAtOperationTimeclusterTime

我特别担心并且在文档中找不到确切信息的地方是,startAtOperationTime相同的规则和保证是否适用于可以恢复的内容和持续时间。此处使用的操作时间是否正确保留,是否可以始终用作通常用于的文档令牌的替代品resumeAfter

0 投票
1 回答
1406 浏览

mongodb - MongoDB 更改流事件:替换与更新?

我检查了文档https://docs.mongodb.com/manual/reference/change-events/

我不确定“替换”和“更新”事件的确切时间。

例如,当我使用 MongoDB Compass 更改文档的 1 个字段时,我预计事件“更新”会触发,但当我记录该事件时,它是“替换”。

因此,如果预期的更新实际上是“替换”事件,那么真正的“更新”事件何时会触发?

谢谢。

0 投票
1 回答
483 浏览

node.js - 无法从 mongodb 更改流“更改”事件中删除侦听器

我认为mongodb 更改流扩展了EventEmitter类,所以我尝试使用 removeListener 函数删除我安装的事件。在更改流上调用 removeListener 后,它仍然会在更改时触发。可能是我在删除时只是使用了错误的函数引用,但我看不出如何。

我发现 removeAllListeners 确实删除了附加的侦听器。但我需要控制要删除的侦听器。

应该输出 1 0

但它输出 1 1

听者继续听。

使用 .once 而不是 .on 只能起到一半的作用。我仍然需要 removeListener 因为我需要能够尽早取消侦听器。

0 投票
0 回答
447 浏览

c# - 更改流:为什么 FullDocument 返回为 null?

我正在使用 C# 驱动程序来获取更改流。但现在我想过滤传入的文件。在阅读了一些文本和 stackoverflow 答案后,我有两种方法可以做到这一点。但由于某种原因,其中一种方法是将 FullDocument 归还给我,而另一种则不归还给我。

我想了解为什么会这样。如果有人遇到过或者知道是什么原因。请分享您的意见。

下面的管道工程。这意味着我可以获得完整的文档。

下面的管道不起作用,这意味着我将 FullDocument 设为 null

以及处理变更流的主循环

0 投票
1 回答
142 浏览

java - MongoCollection.watch() 不会立即观看

似乎手表没有立即动作,以下代码仅在睡眠后输出插入。我怎样才能等到更改流连接?