Il est préférable d'ajouter un sort()
explicite critères si vous voulez un ordre prévisible des résultats.
En supposant que l'ordre que vous recherchez est "l'ordre d'insertion" et que vous utilisez les ObjectId générés par défaut de MongoDB, vous pouvez interroger en fonction de l'ObjectId :
// Find next product created
db.products.find({_id: {$gt: ObjectId("4fdbaf608b446b0477000142") }}).limit(1)
Notez que cet exemple ne fonctionne que parce que :
- les quatre premiers octets de l'ObjectId sont calculés à partir d'un horodatage de style Unix (voir :Spécification d'ObjectId )
- une requête sur
_id
seul utilisera le_id
par défaut index (trié par identifiant) pour trouver une correspondance
Donc vraiment, ce tri implicite est le même que :
db.products.find({_id: {$gt: ObjectId("4fdbaf608b446b0477000142" )}}).sort({_id:1}).limit(1);
Si vous avez ajouté plus de critères à la requête pour qualifier comment trouver le produit "suivant" (par exemple, une category
), la requête peut utiliser un index différent et l'ordre peut ne pas être comme prévu.
Vous pouvez vérifier l'utilisation de l'index avec explain() .