【问题标题】:Tailable cursor closing when reaching end of collection到达集合结束时可尾游标关闭
【发布时间】:2015-06-30 17:13:56
【问题描述】:

我正在尝试从 MongoDB 上限集合中流式传输一些数据,如下所示:

var query = {};
var options = {tailable: true, awaitdata: true, numberOfRetries: Number.MAX_VALUE};

var stream = myColl.find(query, options).stream();

stream.on('data', function(doc){
    console.log(doc);
}).on('error', function (error){
    console.log(error);
}).on('close', function () {
    console.log('closed');
});

这会按预期打印文档,但在到达集合末尾时,流会关闭。是否有可能防止这种情况发生?我希望程序在数据到达集合时打印数据,在集合结束时无限期地等待更多数据。

【问题讨论】:

  • 由于某种原因,awaitdata: true 选项会导致此问题。几周前我遇到了这个问题。尝试仅使用 {tailable: true} 作为选项。
  • @BrianShamblen 在同一问题中尝试结果 var options = {tailable: true};。我也试过var stream = myColl.find().tailable().stream();你的代码在几周前工作了吗?
  • 是的,我需要编写一个 oplog 监视器。我遇到了同样的问题,光标一直关闭。删除 awaitdata 选项修复了它。
  • @BrianShamblen 奇怪该解决方案对我不起作用。您是否启用了任何其他选项(例如 numberOfRetries)
  • 不,只有一个选项。可能我们正在运行不同的版本,这就是为什么它适用于我而不适用于你。我在 4.0.3

标签: node.js mongodb mongoose


【解决方案1】:

解决了这个问题。原来我的问题是我没有正确格式化我的选项。

myColl.find().tailable(true, { awaitdata: true ,numberOfRetries:  Number.MAX_VALUE}).stream();

正确且按预期工作。

【讨论】:

    猜你喜欢
    • 2019-06-11
    • 2015-07-30
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 2020-08-10
    • 1970-01-01
    相关资源
    最近更新 更多