在服务器端为 mongodb 更改编写侦听器
Write a listener for mongodb changes on server side
我想为服务器端的 nodejs 应用程序编写一个侦听器,用于更改 mongoDB 中的集合。我正在使用 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"
它在数据库更改时仍然没有做任何事情。这真的是正确的方法吗?
我明白了。您需要启动 replset。在您的 MongoDb 终端中,输入:
rs.initiate()
还要确保您连接到数据库的正确主机名。
无论何时使用 replSet 配置启动 mongod 实例,都必须使用 rs.initiate()
命令启动副本集,然后添加副本集成员。
当您使用驱动程序客户端连接到副本集时,请提供副本集 mongod 主机的完整列表,以便我们可以利用副本集的自动故障转移。
我想为服务器端的 nodejs 应用程序编写一个侦听器,用于更改 mongoDB 中的集合。我正在使用 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"
它在数据库更改时仍然没有做任何事情。这真的是正确的方法吗?
我明白了。您需要启动 replset。在您的 MongoDb 终端中,输入:
rs.initiate()
还要确保您连接到数据库的正确主机名。
无论何时使用 replSet 配置启动 mongod 实例,都必须使用 rs.initiate()
命令启动副本集,然后添加副本集成员。
当您使用驱动程序客户端连接到副本集时,请提供副本集 mongod 主机的完整列表,以便我们可以利用副本集的自动故障转移。