2017-04-18 88 views
0

我有一个MongoDB的本地实例,以--master开头,我可以在开始日志中看到我有一个副本集oplog(文件:/data/db/local.1)创建。并且每当我执行并插入()时,local.1都会更新。MongoDB操作日志流Node.js

我试图尾/流的OPLOG用下面的代码...

MongoDB.connect('mongodb://localhost:27017/test',(e,db) => { 
 
      if (e) { return console.log('Connect MongoDB Error',e); } 
 
      console.log('Connected MongoDB'); 
 
      Server.DB = db; 
 
       db.collection('oplog.rs').find({}).toArray((e,d) => { 
 
       console.log('oplog.rs'); 
 
       console.log(e); 
 
       console.log(d); 
 
       }) 
 

 
      var updates = db.collection('oplog.rs').find({},{ 
 
           tailable: true, 
 
           awaitData: true, 
 
           noCursorTimeout: true, 
 
           oplogReplay: true, 
 
           numberOfRetries: Number.MAX_VALUE 
 
           }).stream(); 
 
           
 
       updates.on('data',(data) => { console.log('data',data); }); 
 
       updates.on('error',(e) => { console.log('error',e); }); 
 
       updates.on('end',(end) => { console.log('end',end); }); 
 
     });

守则登录开始下面...

oplog.rs 
 
null 
 
[]

但是没有从流输出,我设置numberOfRetries到一个较低的值I得到的错误..

error { MongoError: No more documents in tailed cursor 
 
    at Function.MongoError.create (/Users/peter/node_modules/mongodb-core/lib/error.js:31:11) 
 
    at nextFunction (/Users/peter/node_modules/mongodb-core/lib/cursor.js:637:50) 
 
    at /Users/peter/node_modules/mongodb-core/lib/cursor.js:588:7 
 
    at queryCallback (/Users/peter/node_modules/mongodb-core/lib/cursor.js:211:18) 
 
    at Callbacks.emit (/Users/peter/node_modules/mongodb-core/lib/topologies/server.js:116:3) 
 
    at Connection.messageHandler (/Users/peter/node_modules/mongodb-core/lib/topologies/server.js:282:23) 
 
    at Socket.<anonymous> (/Users/peter/node_modules/mongodb-core/lib/connection/connection.js:273:22) 
 
    at emitOne (events.js:96:13) 
 
    at Socket.emit (events.js:189:7) 
 
    at readableAddChunk (_stream_readable.js:176:18) 
 
    name: 'MongoError', 
 
    message: 'No more documents in tailed cursor', 
 
    tailable: true, 
 
    awaitData: true } 
 
end undefined

回答

0

oplog.rsreplica sets被使用。用--master启动mongodb,您正在使用长期不推荐的master-slave replication,它使用local.oplog.$main数据库,因此oplog.rs中没有内容。

您需要启动与--replSet mongod受益于复制集oplog。 Read more how to deploy and configure replica sets

+0

我现在已经连接到一个Atlas集群,仍然oplog.rs是空的,tail()导致相同的消息。 (尝试local.oplog.rs/oplog.rs/oplog)。 – user3094755

+1

你确定使用'local'数据库吗?你究竟如何尝试local.oplog.rs *?为了清楚起见,它假设是'MongoDB.connect'('mongodb:// host:port/local',(e,db)'。你运行'rs.status()'时有什么?和从shell中获得'rs.config()' –

+0

好吧,我现在看到了,我需要使用db/local,它将成为集群上的全局数据库,所以我认为它不适用于我的应用程序,因为我想为一个给定的数据库捕获事务,而不是所有的数据库,所以我可以过滤全局数据库/本地,或者为每个数据库创建新的cappedCollection感谢您的回答 – user3094755