It is best to add explicit sort()
criteria if you want a predictable order of results.
Assuming the order you are after is "insertion order" and you are using MongoDB's default generated ObjectIds, then you can query based on the ObjectId:
// Find next product created
db.products.find({_id: {$gt: ObjectId("4fdbaf608b446b0477000142") }}).limit(1)
Note that this example only works because:
- the first four bytes of the ObjectId are calculated from a unix-style timestamp (see: ObjectId Specification)
- a query on
_id
alone will use the default _id
index (sorted by id) to find a match
So really, this implicit sort is the same as:
db.products.find({_id: {$gt: ObjectId("4fdbaf608b446b0477000142" )}}).sort({_id:1}).limit(1);
If you added more criteria to the query to qualify how to find the "next" product (for example, a category
), the query could use a different index and the order may not be as you expect.
You can check index usage with explain().