Node.js监听MongoDB的变化

时间:2011-09-28 18:27:13

标签: mongodb node.js watch listen

Node.js是否有办法收听MongoDB集合中特定数据的更改,并在发生更改时触发事件?

4 个答案:

答案 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)

好吧,有点晚了。
但是,如果有人想要通知MongoDB更改了node.js,那么他们可以使用mubsub库。

这是一个活动库,很容易与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);
});
相关问题