Node.js слушает изменения MongoDB - PullRequest
5 голосов
/ 28 сентября 2011

Есть ли способ для Node.js прослушивать изменение определенных данных в коллекции MongoDB и генерировать событие, если происходит изменение?

Ответы [ 4 ]

14 голосов
/ 06 марта 2013

Ну, это старый вопрос, но я боролся с тем же.Я нашел несколько лакомых кусочков, которые помогли мне составить решение, и опубликовал его в виде библиотеки:

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);
});
3 голосов
/ 29 сентября 2011

Я полагаю, что вы ищете триггер базы данных .

К сожалению, MongoDB их пока не поддерживает, поэтому я не думаю, что вы можете прослушивать изменения непосредственно из базы данных.,Вам необходимо настроить какую-либо систему уведомлений (например, паб / подпункт), которая будет уведомлять заинтересованные стороны об изменении коллекции.

1 голос
/ 05 марта 2017

Ну, вроде как поздно.
Но, тем не менее, если кто-то, желающий уведомить MongoDB, переходит на node.js, он может использовать библиотеку mubsub .

Это активная библиотека, которую очень легко интегрировать с nodejs. Он использует настраиваемые курсоры Монго и ограниченные коллекции.
Он работает в режиме pub / sub, чтобы уведомить подписчика, когда документ вставлен в MongoDB.

Проверьте Github для получения подробной информации.

0 голосов
/ 28 июня 2019

В 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);
});
...