如何在Mongoose查询上设置超时?

Ale*_*rie 10 mongoose mongodb node.js

我正在使用Mongoose和一个非常大的Mongo数据库,我想要MySet.find({})在10秒后超时的昂贵查询.

我已经尝试在我的连接上设置套接字超时,但是如果超出超时,服务器会崩溃:

var options = {server: {socketOptions: {socketTimeoutMS: 10000}}};
var conn = mongoose.connect('mongodb://localhost/my_db', options);
Run Code Online (Sandbox Code Playgroud)

我已经尝试将maxTimeMS选项传递给find函数,但这根本没有任何影响:

MySet.find({}, {}, {timeout: true, maxTimeMS: 10000}, function(err, doc) {});
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Joh*_*yHK 10

您可以使用Query#maxTimeMongoose本身未记录的方法来执行此操作,但它是maxTimeMSMongoose用于其流畅查询接口的库的一部分.

所以在你的情况下,你会称之为:

MySet.find({}).maxTime(10000).exec(function(err, doc) { ... });
Run Code Online (Sandbox Code Playgroud)

您可以mongoose.set('debug', true);通过启用Mongoose调试来确认它是否正确设置了该选项Query#maxTime,然后您将看到此查询的控制台输出,如下所示:

Mongoose: myset.find({}) { maxTimeMS: 10000, safe: true, fields: {} }
Run Code Online (Sandbox Code Playgroud)

  • 是否可以选择将此 maxTime 全局添加到所有查询? (2认同)

Kau*_*hal -3

我认为这应该有效。

db.mycoll.find().maxTimeMS(50)