Node.js是否有办法收听MongoDB集合中特定数据的更改,并在发生更改时触发事件?
答案 0 :(得分:14)
嗯,这是一个老问题,但我正在努力解决同样的问题。我发现了一些帮助我整理解决方案的花絮,我把它作为一个库发布了:
https://github.com/TorchlightSoftware/mongo-watch
该库是用coffeescript编写的。这是javascript中的一个例子,对于那些喜欢的人。
var MongoWatch = require('mongo-watch'),
watcher = new MongoWatch({parser: 'pretty'});
watcher.watch('test.users', function(event) {
return console.log('something changed:', event);
});
答案 1 :(得分:3)
我相信您正在寻找database trigger。
不幸的是,MongoDB还没有支持它们,所以我认为你不能直接从数据库中监听更改。您需要设置某种通知系统(例如,pub / sub),以便在收集更改时向相关方发出警报。
答案 2 :(得分:1)
这是一个活动库,很容易与nodejs集成。
它使用Mongo的tailable游标和上限集合。
它以pub / sub方式工作,以便在文档插入MongoDB时通知订阅者。
查看Github了解详情。
答案 3 :(得分:0)
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);
});