Oleg Mikheev
Oleg Mikheev

Reputation: 17444

Simulate slow query in mongodb?

Does MongoDb have anything like MySql's SELECT SLEEP(5); ?

I can see some internal sleep function that would pause the whole server, but I need to pause just the current query.

Disclaimer: just for testing purposes

Upvotes: 8

Views: 11386

Answers (4)

Atique
Atique

Reputation: 56

from mongo Shell you can run :

db.collection_name.find( { $where: function() { return sleep(100) || true }}).pretty();

tested and working.

Upvotes: 4

RubenCaro
RubenCaro

Reputation: 1466

You can use the $where operator as code_monkey_steve says, but be sure you do with mongo version >= 2.4. Before that version no javascript can be run on parallel on the same server. The sleep command is javascript, so it would apparently block other javascript queries you could be making.

Upvotes: 4

code_monkey_steve
code_monkey_steve

Reputation: 301

You can use the $where operator to call sleep(). This should work in any language or ORM/ODM. For example, in Mongoid you could do:

Model.where( :$where => "sleep(100) || true" ).count

Tune the sleep value for the number of documents in the collection (it will delay on each one). This will do fairly horrible things to the DB server, so only use it for testing, and never (ever!) on a production server.

Upvotes: 8

Stennie
Stennie

Reputation: 65333

From the mongo shell you can do sleep( ms ), eg sleep for 5 seconds before running a query:

> sleep(5000); db.collection.find(..);

This doesn't pause the current query, but does pause execution on that connection for the specific number of milliseconds before continuing with the next statement (which is equivalent to a select sleep(5) in MySQL).

Upvotes: 2

Related Questions