【问题标题】:Node.js listen to MongoDB changeNode.js 监听 MongoDB 变化
【发布时间】:2011-11-27 02:46:03
【问题描述】:

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

【问题讨论】:

  • 您从哪里写入 MongoDB 存储?仅来自 node.js 实例,还是来自多个来源?
  • 嗯.. mongo 连接到 node.js 但是,人们可以直接手动更改 mongo 中的数据。 (如 mongoHub)

标签: mongodb node.js watch listen


【解决方案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() 方法。
  • Stackoverflow 需要一种方法来“不接受”您自己接受的答案,以便当事情发生变化时,更好的答案会浮到顶部......
【解决方案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);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多