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

java - 当 ReplicaSet MongoDB 中的节点发生故障时,更改事件流停止工作

我遇到了 mongodb(4.2 版)的问题,特别是 Change Stream 功能。

我有一个由 1 个主要、1 个辅助和 1 个仲裁器组成的 ReplicaSet 集群,并且在我的带有 API mongodb-driver-sync 4.2.0-beta1 的 java 代码中,我有一个感兴趣的集合上的 .watch() 进程。如下所示:

基本上,流工作正常。发生插入/更新操作时,会识别事件并正确流式传输文档。但是,当两个节点之一(主节点或辅助节点,一个承载数据的节点)出现故障时,观察者将停止流式传输任何内容。更新/插入操作在数据库上继续正常,但流被阻止。一旦我重新启动两个节点之一,流立即正确恢复,并向我显示以前未流式传输的事件。另一方面,如果仲裁节点出现故障,则流继续正常工作。

在我的 rs.conf() 文件下方,如您所见,WriteConcern 参数为 1。

谁能帮我解决这个问题?

更新:为了解决此问题,在每个节点的每个 .conf 文件中,我将 replication.enableMajorityReadConcern 设置为 false,以禁用 ReadConcernMajority。无论如何,按照此设置,通过停止主节点或辅助节点之一,我总是在控制台中收到以下异常:

另一方面,如果我默认注释掉每个文件 .conf 节点中的 enableMajorityReadConcern,则不会出现该异常。

因此,我的问题是以下两个:

  1. 为什么仅当 ReadConcern 设置为 false 并且当节点关闭是数据承载节点时才会引发该异常?
  2. 为什么当仲裁节点关闭时,无论 ReadConcern 设置如何,都不会引发该异常?

谢谢!

0 投票
2 回答
317 浏览

mongodb - 如何使用 mongodb 更改流

如何使用更改流方法为用户引用一个集合或多个集合。

类似于 Facebook 的场景,朋友的新闻会显示在您的提要上。

0 投票
2 回答
875 浏览

node.js - changeStream watch() 我的 mongodb 数据库使用 nodeJs 时发生错误

错误:“收集方法手表是同步的”。

我在 mongo atlas 中有一个数据库 whatsAppdb,现在想要使我的 mongodb 实时化,因此我在 mongodb 集合中使用 changestream,如代码所示,但是在执行此操作时会发生错误“集合方法监视是同步的”,如图所示。

如果我不编写 db.collection("Contact") 语句但应用程序在添加此语句后立即崩溃,则会在控制台日志中打印“Db is connected”。

/************************************/

错误截图

0 投票
1 回答
179 浏览

mongodb - 更改流 mongodb 重复项

我正在尝试动态创建更改流。我想知道是否有办法避免创建更改流来观察同一个目标?

如果现在测试集合有一些变化,我将收到两次通知。由于我在 SQS 旁边发送通知,因此我将收到重复的消息。

有没有办法检查目标'xy'的更改流是否已经存在,以避免有相同的观察者?

谢谢

0 投票
1 回答
130 浏览

node.js - mongodb changestream“管道”不起作用nodejs

我有以下更改流,但是一旦我使用 mongo compass 更新,就不会记录它的功能更改。

0 投票
1 回答
100 浏览

mongodb - 为什么 mongodb 从更改流中返回空实体?

我在 mongodb 中有一个通过 changestreams 监视的集合。

我观察的事件是:“插入、更新、替换”。

事件在函数中接收,但实体包括所有空字段(或例如原语的默认值)。

有没有办法从变更流中获取我创建或更新的对象?

0 投票
1 回答
26 浏览

node.js - 在我的 mongodb 更改流中获取 'Unrecognized expression '$or''/“Unknown top level operator $or”

因此,以下代码在本地工作而不会出现此错误。但是,当我部署到 heroku 时,使用以下代码:

我收到此错误:

注释掉管道会在我部署时消除错误,所以至少我知道问题出在更改流上。我仍然不知道为什么它在本地工作而不是在部署中。我还在我的项目中使用 nodejs 事件发射器,如果这与此有关。我知道 changeStreams 使用来自节点的相同事件发射器库。

欢迎任何帮助;谢谢。

0 投票
0 回答
141 浏览

mongodb - MongoDB Atlas 使用 $in 运算符引发错误

我开发了一个本地版本的社区 MongoDB (v4.4) 的应用程序。现在我已经连接到 Mongo Atlas(它正在运行 v 4.2)。

我正在运行 watch 命令来创建变更流。虽然使用我的本地设置一切正常,但使用 atlas 我得到一个错误

查询,resp。观看管道是

我已将其更改为$or替代方案:

这可以正常工作。这Database是来自 nodejs 驱动程序的连接。该错误是调用手表后来自 atlas 服务器的立即响应。

该错误还具有以下属性:

有什么问题?我可以/应该怎么做?虽然解决方法有效,但我想它的性能较低。

0 投票
1 回答
250 浏览

database - Mongodb查找和观看

我正在尝试通过使用 find 和 watch 组合来实现一个使自身保持最新的结构。例如,对于用户集合,我们找到所有用户并将它们存储在哈希图中。之后,我们打开观察流并根据传入的事件更新我们的 hashmap。但是有一个问题——如果在读取用户和打开流之间发生变化,我们最终可能会失去同步。

我的想法是使用 startAtOperationTime 选项,但我们无法可靠地知道我们需要的时间戳。我也看不到交易的方法。

问题是 - 我们如何在读取操作后准确地打开更改流并且不丢失任何数据。

0 投票
1 回答
365 浏览

node.js - MongoDB 更改流 - 重复记录/多个侦听器

我的问题是这里前面讨论的延伸: Mongo Change Streams running multiple times (kind of): Node app running multiple instances

在我的例子中,应用程序部署在 Kubernetes pod 上。至少有 3 个 pod,最多 5 个 pod。上面链接中提到的解决方案建议在 $mod 运算符中使用<this instance's id> 。由于应用程序部署到 K8s pod,因此 pod 名称是动态的。如何为我的场景实现类似的解决方案?