Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

node.js - How do I set a timeout on a Mongoose query?

I am using Mongoose with a very large Mongo database, and I want costly queries like MySet.find({}) to time out after 10 seconds.

I've tried setting a socket timeout on my connection, but the server crashes if the timeout is exceeded:

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

I've tried passing the maxTimeMS option to the find function, but that doesn't have any effect at all:

MySet.find({}, {}, {timeout: true, maxTimeMS: 10000}, function(err, doc) {});

Any ideas?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You can do this with the Query#maxTime method.

So in your case, you would call it as:

MySet.find({}).maxTime(10000).exec(function(err, doc) { ... });

You can confirm it's correctly setting the maxTimeMS option by enabling Mongoose debugging via mongoose.set('debug', true); and then you'll see console output for this query that looks like:

Mongoose: myset.find({}) { maxTimeMS: 10000, safe: true, fields: {} }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...