我正在使用nodeJs服务器中的猫鼬(4.13.10)连接到使用以下命令的mongodb实例
mongoose.createConnection('mongodb://user:pass@localhost:27017/mydb')
我正在使用游标遍历数据库的记录,并对数据库进行多次查询,这需要很多时间,因此我遇到了Cursor not found
异常。我发现发生这些情况是由于游标的空闲超时与我的观察结果相符。
现在,我不想将nocursortimeout
标记为true,而是将超时设置为某个较高的值,据此我可以确定长时间运行的查询将完成。但是我找不到任何文档,也无法指导如何设置cursorTimeoutMillis
服务器参数。
如何设置此参数?如果可能的话,我想为一个特定的游标而不是整个连接设置它。有可能吗?
答案 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