【发布时间】:2014-11-12 08:03:44
【问题描述】:
我使用下面的代码从 mongodb capped collection 中获取数据
函数监听(条件,回调){
db.openConnectionsNew( [req.session.client_config.db] , function(err, conn){
if(err) {console.log({err:err}); return next(err);}
coll = db.opened[db_name].collection('messages');
latestCursor = coll.find(conditions).sort({$natural: -1}).limit(1)
latestCursor.nextObject(function(err, latest) {
if (latest) {
conditions._id = {$gt: latest._id}
}
options = {
tailable: true,
awaitdata: true,
numberOfRetries: -1
}
stream = coll.find(conditions, options).sort({$natural: -1}).stream()
stream.on('data', callback)
});
});
}
然后我使用 sockets.broadcast(roomName,'data',document);
在客户端
io.socket.get('/get_messages/', function(resp){
});
io.socket.on('data', function notificationReceivedFromServer ( data ) {
console.log(data);
});
这非常有效,因为我可以看到插入到 db 中的任何新文档。
我可以在 mongod -verbose 中看到,每 200 毫秒后会有一个使用查询 {$gt:latest_id} 运行的查询,这很好,但我不知道如何关闭这个查询 :( 我很新nodejs 和第一次使用 mongodb tailable 选项,我完全迷路了,非常感谢任何帮助或线索
【问题讨论】:
标签: javascript node.js mongodb mongodb-query