5

Node.js 有没有办法监听 MongoDB 集合中特定数据的变化,并在发生变化时触发事件?

4

4 回答 4

14

好吧,这是一个老问题,但我也在为同样的事情苦苦挣扎。我发现了许多帮助我制定解决方案的花絮,并将其作为库发布:

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);
});
于 2013-03-06T08:49:04.537 回答
2

MongoDB 显然现在支持触发器和监视,这个答案已经过时了。

[原创]相信你是在找数据库触发器

不幸的是,MongoDB 还不支持它们,所以我认为您不能直接从数据库中监听更改。您需要设置某种通知系统(例如 pub/sub),以便在集合发生更改时向相关方发出警报。

于 2011-09-28T22:26:22.830 回答
1

嗯,有点晚了。
但是,如果有人希望通知 MongoDB 对 node.js 的更改,那么他们可以使用mubsub库。

这是一个活跃的库,很容易与 nodejs 集成。它使用 Mongo 的可尾游标和封顶集合。
它以 pub/sub 方式工作,以在文档插入 MongoDB 时通知订阅者。

详情请查看Github

于 2017-03-04T22:07:56.657 回答
1

MongoDB 3.6 引入了变更流,旨在准确解决这个问题。

这是一个例子: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);
});
于 2019-06-28T14:42:53.550 回答