问题标签 [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 回答
89 浏览

.net - 如何使用mongo changestream diff

Mongo changestreams 可以将更改的差异作为 bson 发送。

可以轻松地将差异应用于 bson 文档的先前版本吗?

有一个方法BsonDocument被调用Merge,但它似乎没有做我想要的。具体来说,数组更改被标记为,例如ArrayName.0创建一个具有该名称的属性,而不是更新数组中的第 0 个元素。

0 投票
3 回答
895 浏览

mongodb - 如何在 MogoDB 3.6 的 docker 映像中启用更改流?

我在我的代码中使用 MongoDB 更改流,需要创建一个启用更改流的 MongoDB docker 映像。问题是应该首先使用默认设置启动 mongod 以允许创建用户、文档等。然后应该停止 mongod。然后应该将副本集添加到 mongod.conf 以启用更改流:

之后应该再次启动 mongod 并由 MongoDB shell 初始化副本集:

MogodDB 3.6基础镜像提供了初始化功能。你知道如何启动 mongod,初始化 DB 然后停止它并重新配置吗?

UPD:我需要初始化数据库然后添加副本集。因此,我需要使用默认的 mongod.conf 运行 mongod,创建用户和集合,然后使用另一个启用了副本集的 mongod、conf 重新启动 mongod。我不能用官方的 MongoDB 图像来做到这一点。我已经在 Ubuntu 映像上安装了 MongoDB 3.6.12。在 bash shell 中手动运行设置命令后,我的 MongoDB 容器运行良好,但相同的指令在 Dockerfile 中不起作用这是命令

从 Dockerfile 运行此命令时,出现以下错误

0 投票
1 回答
496 浏览

node.js - collection.watch() 不是函数

我想在我的节点 js 应用程序中使用变更流将 MongoDB 用作实时数据库,但出现错误

类型错误:collection.watch 不是函数

我的 MongoDB 版本是 4.0.9。设置副本集时我做错了吗?

我与数据库的连接有一个这样的 uri

我用这个命令运行 mongo

0 投票
1 回答
3058 浏览

mongodb - 何时从流中清除 mongodb 更改流事件

我知道,当任何监视的 mongo 实体被更改/添加时,mongo 会将这些更改记录在更改流中,应用程序可以收听这些更改。

什么时候清除单个变更流事件,变更流的最大容量是多少。是否存在由于最大容量限制而在通知订阅者之前从更改流中删除日志的负面情况。

我在他们的官方页面中找不到任何此类数据: https ://docs.mongodb.com/manual/changeStreams/

0 投票
2 回答
3794 浏览

database - 删除文档时如何从 MongoDB changeStream 获取 fullDocument?

我的代码

我有一个带有两个集合的 MongoDB,Items并且Calculations.

A是基于数据库中所有日期在的开始日期和结束日期之间的值Calculation的存储计算。ItemItemsCalculation

Mongo 更改流

我认为创建/更新的一个好方法Calculations是在集合上创建一个 Mongo Change Stream,Items它侦听对集合的更改,Items然后重新计算相关的Calculations.

问题是,根据Mongo Change Event docs,当一个文档被删除时,该fullDocument字段被省略,这将阻止我访问已删除Item的日期,这将通知Calculations应该更新哪个。

问题

有没有办法访问fullDocument由于文档删除而触发的 Mongo 更改事件?

0 投票
1 回答
764 浏览

mongoose - MongoError:不支持聚合阶段:'$changeStream'

我们有一个文档数据库的分片集群,托管在 AWS 上并使用 mongo db 版本 3.6,我们希望在 node.js 代码中实现一个 collection.watch() 函数来获取更改流,只要集合中有更改。当我连接在副本模式下运行的本地主机 mongodb 服务器时,它工作正常,我正在节点 js(客户端)中获取更改流,但是当我尝试连接到 AWS 上托管的文档 db 分片集群时,我得到了错误MongoError:不支持聚合阶段:'$changeStream'

我以复制模式连接了在 localhost 端口(27001 和 27002)上运行的本地 mongo db 服务器,它工作正常,但是在连接到 AWS 托管的文档数据库集群时,它给出了如上所述的错误。

这是我用来连接到文档数据库集群的代码。

建立连接后,我使用下面的代码来实现 watch 函数来查找 changeStream。

我在下面的行中遇到的确切错误

错误是“MongoError:不支持聚合阶段:'$changeStream'”

确切的错误堆栈跟踪:

我的问题在这里,有人见过这种错误吗?错误的可能根本原因应该是什么?我可以在 mongodb 集群端验证一些东西,这可以帮助纠正这个错误。我期望 changeStream 打印在 console.log(change) 中,而不是打印它会抛出这个错误。

任何帮助将不胜感激。

谢谢!

0 投票
0 回答
126 浏览

mongodb - MongoDB changeStream 初始值

我正在使用 MongoDB 来支持我的多人游戏应用程序。每次有更新时,我都使用 changeStream 通知客户端游戏状态:

这样做的问题是客户端只会在他们的游戏发生变化时获得更新,但他们还需要一种方法来在最初连接到服务器时获取游戏的当前状态。否则,他们必须等到有人更新游戏状态后才能收到游戏文档。

我想要一些类似 RethingDB 的初始值特性的东西用于他们的 changefeeds。ZeroMQ 还描述了一种类似的模式,他们称之为最后值缓存

用 MongoDB 实现这种模式的最佳方法是什么?

显而易见的解决方法是让客户端findOne在最初连接到游戏时执行查询,但随后客户端需要一种方法来解决变更流更新和findOne结果之间的排序问题。

0 投票
1 回答
331 浏览

mongodb - MongoDB collection.Watch() 编译并停止运行

我是 MongoDB 的新手,我尝试使用“go.mongodb.org/mongo-driver/mongo”库中的 collection.Watch()。和来自https://github.com/minhthuy30197/change_stream/blob/master/main.go的代码。然后我构建并运行它立即停止。

我试图一次又一次地运行,它也停止运行。go run main.go我已经在and之间切换./testStreams,它仍然停止运行

所以这是我编辑的代码。

当我编辑然后出现错误

2019/08/07 13:46:39 无法打开客户端连接:拓扑已连接或连接退出状态1

我该怎么修??

0 投票
2 回答
1758 浏览

mongodb - MongoDB 更改流:我可以在更新/删除之前获得价值吗?

更新操作上的更改流事件仅返回更改到的文档,与 oplog 相同。我可以在更新之前获取文档(或一些更新的值)吗?

MySQL 基于行的 binlog 可以使用完整的 binlog_row_image 来做到这一点。

0 投票
0 回答
682 浏览

mongodb - 猫鼬观察法

如何为 watch 方法指定 Pipeline 数组

我正在尝试将 Mongoose 与 MongoDB 一起使用,并使用管道在集合上设置监视。Mongoose 文档 ( https://mongoosejs.com/docs/api/model.html#model_Model.watch ) 和 JS mongodb API ( http://mongodb.github.io/node-mongodb-native/3.0/api /Collection.html#watch)提到 Watch 方法的 2 个参数。但是,在 Visual Code 中,watch 方法只允许 1 个参数。

Visual Studio 抱怨“预期的参数为 0-1,但得到了 2”。如果我在watch方法中去掉matchStage参数,不报错但是无法设置matchStage代表的过滤器