如何使用猫鼬设置'cursorTimeoutMillis'

时间:2018-10-18 15:44:01

标签: mongoose

我正在使用nodeJs服务器中的猫鼬(4.13.10)连接到使用以下命令的mongodb实例

mongoose.createConnection('mongodb://user:pass@localhost:27017/mydb')

我正在使用游标遍历数据库的记录,并对数据库进行多次查询,这需要很多时间,因此我遇到了Cursor not found异常。我发现发生这些情况是由于游标的空闲超时与我的观察结果相符。

现在,我不想将nocursortimeout标记为true,而是将超时设置为某个较高的值,据此我可以确定长时间运行的查询将完成。但是我找不到任何文档,也无法指导如何设置cursorTimeoutMillis服务器参数。

如何设置此参数?如果可能的话,我想为一个特定的游标而不是整个连接设置它。有可能吗?

1 个答案:

答案 0 :(得分:1)

您可以使用mongodb-native-client设置cursorTimeoutMillis选项,例如:

const MongoClient = require('mongodb').MongoClient;

MongoClient.connect('mongodb://localhost:27017/test', (err, db) => {
  // Use the admin database for the operation
  const adminDb = db.admin();

  // Set the cursor timeout millis option
  adminDb.command({
    setParameter: 1,
    cursorTimeoutMillis: <num>
  }, function(err, info) {
    // Close the connection
    db.close();
  });
});

来自猫鼬,例如:

YourModel.db.db.admin().command({}, (err, res) => {
    console.log(res);
});

要直接在数据库上运行,请运行:

mongod --setParameter cursorTimeoutMillis=300000

文档

http://mongodb.github.io/node-mongodb-native/2.0/api/Admin.html#command

How to run raw mongoDB commands using mongoose?

https://docs.mongodb.com/manual/reference/parameters/#param.cursorTimeoutMillis