Напишите прослушиватель изменений mongodb на стороне сервера

Я хочу написать прослушиватель изменений в коллекции в mongoDB для приложения nodejs на стороне сервера. Я использую Robe, чтобы получить oplog. Вот мой код:

  var co = require('co'),
    Robe = require('robe');

  co(function*() {
    // connect to db
    var db = yield Robe.connect('mongodb://localhost/');
    yield collection.addWatcher(function(collectionName, operationType, data) {
      console.log(collectionName)
    });
    var oplog = yield db.oplog();
    yield oplog.start();
    // listen for any operation on any collection
    oplog.onAny(function(collectionName, operationType, data) {
      console.log("something happened!!!")
    });
  })
    .catch(function(err) {
      console.error(err);
    });

В документации к Robe сказано, что для получения oplog мне нужно подключиться к набору реплик в mongoDB. Я читал о наборе реплик на mongoDB, и я не был в состоянии понять это. Я создал набор реплик под названием «rs0». Я выполнил эту команду, чтобы запустить mongod:

         mongod --replset "rs0"

Он по-прежнему ничего не делает при изменении БД. Это действительно правильный способ сделать это?


person anon_945500    schedule 09.01.2016    source источник
comment
Вы инициировали набор реплик?   -  person harshavmb    schedule 10.01.2016
comment
Я сделал, и после этого я исправил имя соединения db. Теперь это работает. Спасибо!   -  person anon_945500    schedule 11.01.2016
comment
Вы забыли инициировать набор реплик? Или вы инициировали набор реплик, увидев мой комментарий?   -  person harshavmb    schedule 11.01.2016
comment
Должен ли я добавить это как ответ сейчас?   -  person harshavmb    schedule 11.01.2016


Ответы (2)


Всякий раз, когда вы запускаете экземпляры mongod с конфигурацией replSet, вам нужно будет инициировать набор реплик с помощью команды rs.initiate(), а затем добавить членов набора реплик.

Когда вы подключаетесь к набору реплик с помощью клиентов драйверов, предоставьте полный список хостов mongod набора реплик, чтобы мы могли воспользоваться преимуществами автоматического аварийного переключения наборов реплик.

person harshavmb    schedule 11.01.2016

Я понял. Вам нужно инициировать replset. В терминале MongoDb введите:

        rs.initiate()

А также убедитесь, что вы подключаетесь к правильному имени хоста для db.

person anon_945500    schedule 11.01.2016