问题标签 [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.
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,则不会出现该异常。
因此,我的问题是以下两个:
- 为什么仅当 ReadConcern 设置为 false 并且当节点关闭是数据承载节点时才会引发该异常?
- 为什么当仲裁节点关闭时,无论 ReadConcern 设置如何,都不会引发该异常?
谢谢!
mongodb - 如何使用 mongodb 更改流
如何使用更改流方法为用户引用一个集合或多个集合。
类似于 Facebook 的场景,朋友的新闻会显示在您的提要上。
node.js - changeStream watch() 我的 mongodb 数据库使用 nodeJs 时发生错误
错误:“收集方法手表是同步的”。
我在 mongo atlas 中有一个数据库 whatsAppdb,现在想要使我的 mongodb 实时化,因此我在 mongodb 集合中使用 changestream,如代码所示,但是在执行此操作时会发生错误“集合方法监视是同步的”,如图所示。
如果我不编写 db.collection("Contact") 语句但应用程序在添加此语句后立即崩溃,则会在控制台日志中打印“Db is connected”。
/************************************/
mongodb - 更改流 mongodb 重复项
我正在尝试动态创建更改流。我想知道是否有办法避免创建更改流来观察同一个目标?
如果现在测试集合有一些变化,我将收到两次通知。由于我在 SQS 旁边发送通知,因此我将收到重复的消息。
有没有办法检查目标'xy'的更改流是否已经存在,以避免有相同的观察者?
谢谢
node.js - mongodb changestream“管道”不起作用nodejs
我有以下更改流,但是一旦我使用 mongo compass 更新,就不会记录它的功能更改。
mongodb - 为什么 mongodb 从更改流中返回空实体?
我在 mongodb 中有一个通过 changestreams 监视的集合。
我观察的事件是:“插入、更新、替换”。
事件在函数中接收,但实体包括所有空字段(或例如原语的默认值)。
有没有办法从变更流中获取我创建或更新的对象?
node.js - 在我的 mongodb 更改流中获取 'Unrecognized expression '$or''/“Unknown top level operator $or”
因此,以下代码在本地工作而不会出现此错误。但是,当我部署到 heroku 时,使用以下代码:
我收到此错误:
注释掉管道会在我部署时消除错误,所以至少我知道问题出在更改流上。我仍然不知道为什么它在本地工作而不是在部署中。我还在我的项目中使用 nodejs 事件发射器,如果这与此有关。我知道 changeStreams 使用来自节点的相同事件发射器库。
欢迎任何帮助;谢谢。
mongodb - MongoDB Atlas 使用 $in 运算符引发错误
我开发了一个本地版本的社区 MongoDB (v4.4) 的应用程序。现在我已经连接到 Mongo Atlas(它正在运行 v 4.2)。
我正在运行 watch 命令来创建变更流。虽然使用我的本地设置一切正常,但使用 atlas 我得到一个错误
查询,resp。观看管道是
我已将其更改为$or
替代方案:
这可以正常工作。这Database
是来自 nodejs 驱动程序的连接。该错误是调用手表后来自 atlas 服务器的立即响应。
该错误还具有以下属性:
有什么问题?我可以/应该怎么做?虽然解决方法有效,但我想它的性能较低。
database - Mongodb查找和观看
我正在尝试通过使用 find 和 watch 组合来实现一个使自身保持最新的结构。例如,对于用户集合,我们找到所有用户并将它们存储在哈希图中。之后,我们打开观察流并根据传入的事件更新我们的 hashmap。但是有一个问题——如果在读取用户和打开流之间发生变化,我们最终可能会失去同步。
我的想法是使用 startAtOperationTime 选项,但我们无法可靠地知道我们需要的时间戳。我也看不到交易的方法。
问题是 - 我们如何在读取操作后准确地打开更改流并且不丢失任何数据。
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 名称是动态的。如何为我的场景实现类似的解决方案?