Node.js 监听 MongoDB 变化
Posted
技术标签:
【中文标题】Node.js 监听 MongoDB 变化【英文标题】:Node.js listen to MongoDB change 【发布时间】:2011-11-27 02:46:03 【问题描述】:Node.js 有没有办法监听 MongoDB 集合中特定数据的变化,并在发生变化时触发事件?
【问题讨论】:
您从哪里写入 MongoDB 存储?仅来自 node.js 实例,还是来自多个来源? 嗯.. mongo 连接到 node.js 但是,人们可以直接手动更改 mongo 中的数据。 (如 mongoHub) 【参考方案1】:嗯,这是一个老问题,但我也在为同样的事情苦苦挣扎。我发现了许多帮助我制定解决方案的花絮,并将其作为库发布:
https://github.com/TorchlightSoftware/mongo-watch
该库是用咖啡脚本编写的。下面是一个 javascript 示例,供喜欢的人使用。
var MongoWatch = require('mongo-watch'),
watcher = new MongoWatch(parser: 'pretty');
watcher.watch('test.users', function(event)
return console.log('something changed:', event);
);
【讨论】:
你能分享更多关于watcher.watch(...)
返回事件的结构【参考方案2】:
MongoDB 显然现在支持触发器和监视,这个答案已经过时了。
[原创]我相信您正在寻找database trigger。
不幸的是,MongoDB 尚不支持它们,因此我认为您不能直接从数据库中侦听更改。您需要设置某种通知系统(例如 pub/sub),以便在集合发生更改时提醒相关方。
【讨论】:
真的希望触发器可用。他们在上一届 MongoSF 上谈到了他们 mongodb stitch中有触发器 MongoDB 支持.watch()
方法。
*** 需要一种方法来“不接受”您自己接受的答案,以便当事情发生变化时,更好的答案会浮到顶部......【参考方案3】:
嗯,有点晚了。 但是,如果有人希望通知 MongoDB 对 node.js 的更改,那么他们可以使用 mubsub 库。
这是一个活跃的库,很容易与 nodejs 集成。 它使用 Mongo 的可尾游标和封顶集合。 当文档插入 MongoDB 时,它以 pub/sub 方式通知订阅者。
查看Github了解详情。
【讨论】:
【参考方案4】:MongoDB 3.6 引入了change streams,正是为了解决这个问题而设计的。
这是一个例子:https://github.com/thakkaryash94/mongodb-change-streams-nodejs-example
const pipeline = [
$project: documentKey: false
];
const db = client.db("superheroesdb");
const collection = db.collection("superheroes");
const changeStream = collection.watch(pipeline);
// start listen to changes
changeStream.on("change", function (change)
console.log(change);
);
【讨论】:
以上是关于Node.js 监听 MongoDB 变化的主要内容,如果未能解决你的问题,请参考以下文章
Java和Node.js实战 MongoDB 4.x 新特性:Change Streams 变化流
搜索 - 本地处理或进行 API 调用? (Android、Node.JS、MongoDB 后端)