问题标签 [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 投票
2 回答
10668 浏览

mongodb - MongoDB 更改流副本集限制

仅在副本集上提供更改流的原因是什么?

0 投票
1 回答
1310 浏览

mongodb - 在 mongo shell 中创建 mongo 更改流

MongoDB在其 3.6 版本中引入了变更流。
我想在我的代码中实现 mongo 更改流,并想了解它是如何工作的。我将使用 java 驱动程序来实现,这很清楚。但我想知道是否有任何方法可以在 mongo shell 中打开更改流?在这方面找不到太多资源。

0 投票
1 回答
4306 浏览

mongodb - MongoDB 更改流仅显示选定的字段

我正在尝试了解 MongoDB 中的更改流。

我试图只显示更新文档的某些字段。

所以我做了:

这是工作。

现在我只想显示一些字段。

我试过:

或者

但它们都不起作用。

如何仅显示选定的字段?

0 投票
1 回答
1787 浏览

java - Mongo Change Stream“无权执行命令”

这是问题所在。我有mongos连接到远程的本地实例mongod。远程数据库使用基本密码认证。我正在尝试使用简单的 Scala 应用程序为特定集合设置 ChangeStream 观察程序。实际代码如下所示:

它断线.fullDocument(FullDocument.UPDATE_LOOKUP)告诉:

这很令人困惑,因为给定的用户凭据mongo shell在 remote DB 和 local 上都有效mongos。此外,我尝试在该应用程序中使用集合执行一些其他操作(如collection.count())并且它有效!当我尝试设置观察者时出现问题。

0 投票
0 回答
233 浏览

javascript - 如何在 mongoDB 中观看 changestream 并将更新发送到 ajax 调用?

我正在使用 MongoDB 3.6 watch()的新功能,以便将数据库更新从节点服务器发送到客户端的 ajax。

我创建了一个通过 ajax 调用定期查询的 web 服务。在两个连续的 ajax 调用之间,我希望第二个获取同时发生的所有更新。我知道我必须恢复更改流,如下面的官方文档所示:https ://docs.mongodb.com/manual/changeStreams/#resume-a-change-stream 。但是我没有找到如何将其应用于我的特定需求,我的意思是,我可以在哪个回调中处理我的数据并将其发送到 web 服务响应?

这是我的服务器端代码的一部分:server.js

网络服务部分:

这是控制台日志,正如我们所见,我处理数据的部分永远不会被调用:

0 投票
1 回答
1324 浏览

mongodb - Mongo 变更流时间戳

在跟踪 oplog 时,我会看到每个事件的时间戳。与直接跟踪 oplog 相比,更改流具有优势,所以我想使用它们。但是,我找不到任何方法来确定何时发生更改。如果我的脚本停机一段时间然后使用恢复令牌恢复,这将是有问题的。

有没有办法得到那个时间戳?

0 投票
0 回答
4127 浏览

mongodb - 如何使用 Spring Data Mongodb 监视 MongoDB 更改流中特定字段的更改

根据mongodb changestream的文档,我可以查看集合中特定字段的更新:

我想知道,如何用 spring data mongodb reactive 实现同样的事情。

当我用

我得到所有更新。这些更改事件之一的日志如下所示:

但是,当我将过滤器更改为

或者

我没有改变事件。所以这里有一个问题:我如何定义 Criteria 以匹配updatedField.b上的更新?

集合中的示例文档是:

第一个“工作”过滤器的示例可以在以下位置下载: 我的测试 github repo

0 投票
1 回答
1091 浏览

java - 当 mongodb 更改流的恢复令牌已过时时,java 驱动程序的行为是什么?

在查看集合上的更改流时,我可以指定一个恢复令牌(使用 resumeAfter)来获取 opslog 中该令牌之后的更改。如果在 opslog 中找不到此令牌(例如,客户端断开连接时间过长并提供旧令牌),会发生什么情况?

特别是,异步 mongodb java 驱动程序会检测到这种情况吗?如何检测?

对我来说,这个问题很重要,因为我必须检测我是否丢失了连接并且必须再次提取所有数据,或者可以依靠更改流从集合中获取所有更改。

文件指出,

只要 oplog 有足够的历史记录来定位应用程序收到的最后一个操作,更改流是可恢复的。

但没有具体说明,否则会发生什么。我还发现阅读驱动程序源代码来确定客户端如何检测是否可以在 opslog 中找到最后一个令牌相当困难。

0 投票
1 回答
1980 浏览

c# - C# - 使用 $match 在 MongoDB 中更改流

我正在尝试将 MongoDB 中的更改流缩小到与文档的 _id 匹配的特定文档,因为我在一个集合中有许多文档。任何人都知道如何在C#中做到这一点?这是我尝试无济于事的最新消息:

如果我将光标更改为您在下面看到的内容,它会起作用,但是当文档中存在任何 _id 的活动时,它会返回世界并返回更改流。那不是我想要的。

0 投票
1 回答
203 浏览

mongodb-3.6 - Mongodb 3.6 changestream resumeToken 时间戳

我目前正在使用 MongoDB 3.6 的 changestream 功能

我们是一个繁重的更新/插入操作,我们使用 changestream 发送数据进行分析。我们需要实时同步数据,但由于 resumeToken 是二进制的,我很难找到操作的时间戳,因此无法计算分析的同步滞后。

有没有办法从 resumeToken 获取时间戳或任何其他方式来获取操作时间戳。