- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我想要实现的想法是在正在创建新文档(例如插入数据库集合)时读取(查找)mongoDB oplog 集合。
这是我的代码简化:
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect(url, function(err, db) {
if(err){console.error("ERROR",err); return;}
console.log("Connected correctly to server");
db.collection('oplog.rs').find({
ns: 'cabo_dev.documents',
op: 'i',
// ts: {
// $gte: $gte
// }
}, {
tailable: true
})
.each(function (err, entry) {
if (err) {
console.error("Error fetching a document", err, entry);
return;
}
console.log('--- entry', entry);
});
});
我已经评论了 $gte 值以简化,但这个想法是阅读所有"new"日志,而不是旧日志。我也有类似的代码使用 Mongoose ,而不是原始驱动程序。
根据文档,前面的代码会将代表 insert 的所有 oplog 文档返回到 cabo_dev.documents 集合中(cabo_dev 是 db 的名称)和所有新的后续插入。但是,当它完成返回文档(“旧”文档)并且没有更多文档要返回时,它将下一个输出作为错误返回(每个中的 err var):
{ [MongoError: No more documents in tailed cursor]
name: 'MongoError',
message: 'No more documents in tailed cursor',
tailable: true,
awaitData: true }
之后,它不再从 oplog 获取更多插入。根据tainlable documentation ,游标变为死或无效的原因之一是:
这是我认为发生在我身上的事情。然而,在那种情况下,each 进程永远不会结束(这是我希望当光标变为无效或无效时的情况,不是吗?)。但是我真的很想继续获取后续的插入日志。
我做错了什么?
最佳答案
也许您现在已经找到了答案。但我写这个答案只是为了让任何偶然发现同样问题的人都能得到解决。
就我而言mongodb驱动版本是2.0.33
与 mongodb 服务器建立连接后,请执行以下操作:
db.collection('yourCappedColl', function (err, coll) {
var stream = coll.find({},
{
tailable: true,
awaitdata: true,
numberOfRetries: Number.MAX_VALUE
}).stream();
stream.on('data', function(val) {
console.log('Doc: %j',val);
});
stream.on('error', function(val) {
console.log('Error: %j', val);
});
stream.on('end', function(){
console.log('End of stream');
});
});
即:
有关更多详细信息,请参阅此 jira 项目:
关于node.js - 使用nodejs在mongoDB oplog集合中查找每个新文档不起作用(光标似乎变得无效或死了),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29540909/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!