【问题标题】:where to specify "noCursorTimeout" option using nodejs-mongodb driver?在哪里使用 nodejs-mongodb 驱动程序指定“noCursorTimeout”选项?
【发布时间】:2016-03-10 06:11:55
【问题描述】:

这可能很明显,但现在我无法在文档中找到它或在谷歌上找到它......

我正在将 mongodb 与 nodejs-driver 一起使用,并且有一个可能很长的操作(> 10 分钟)与一个确实超时的游标有关(如 http://docs.mongodb.org/manual/core/cursors/#cursor-behaviors 中指定的那样)。

在 nodejs-driver API 文档 (http://mongodb.github.io/node-mongodb-native/2.0/api/Cursor.html) 中提到了在游标上调用方法 addCursorFlag(flag, value)

但是,没有关于如何做到这一点的示例,只需调用例如

objectCollection.find().limit(objectCount).addCursorFlag('noCursorTimeout', true).toArray(function (err, objects) {
    ...
}

导致TypeError: Object #<Cursor> has no method 'addCursorFlag'

那么如何让这个 Cursor 存在的时间超过这 10 分钟呢?

此外,根据 mongodb 文档的要求,我该如何手动关闭光标?

谢谢!

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    您提供的示例:

    db.collection.find().addCursorFlag('noCursorTimeout',true)
    

    ..在驱动程序版本 2.14.21 上工作正常。我现在有一个打开的光标 45 分钟。

    你使用的是 1.x NodeJS 驱动吗?

    【讨论】:

    • 2020 年在 3.6.0 版本上工作
    • 也用 ^3.6.9 测试过。完美运行。谢谢!
    【解决方案2】:

    所以我的问题得到了部分解决方案。 API 文档中没有这样说,但显然您必须在 find() 选项中指定它,如下所示:

    objectCollection.find({},{timeout: false}).limit(objectCount).toArray(function (err, objects) {
        ...
    }
    

    但是,清理工作呢?那些游标会被杀死吗?致电db.close() 是否足够?

    【讨论】:

    • 可以,调用close函数清理光标。一旦客户端上的游标离开范围并由 Node.js 清理,驱动程序仍应自动关闭服务器上的游标。但是如果它没有以某种方式离开范围并且没有关闭,则服务器端游标将无限期保持打开状态,占用资源。如果可能的话,我会避免使用不朽的光标。
    • 谢谢@wdberkeley ...正是我需要的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 2018-06-19
    • 1970-01-01
    • 2016-03-13
    相关资源
    最近更新 更多