MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Suchen des nächsten Dokuments in MongoDb

Am besten fügen Sie explizit sort() hinzu Kriterien, wenn Sie eine vorhersagbare Reihenfolge der Ergebnisse wünschen.

Angenommen, die Reihenfolge, nach der Sie suchen, ist „Einfügungsreihenfolge“ und Sie verwenden die standardmäßig generierten ObjectIds von MongoDB, dann können Sie eine Abfrage basierend auf der ObjectId:

durchführen
// Find next product created
db.products.find({_id: {$gt: ObjectId("4fdbaf608b446b0477000142") }}).limit(1)

Beachten Sie, dass dieses Beispiel nur funktioniert, weil:

  • Die ersten vier Bytes der ObjectId werden aus einem Zeitstempel im Unix-Stil berechnet (siehe:ObjectId-Spezifikation )
  • eine Abfrage auf _id allein verwendet die Standard-_id Index (nach ID sortiert), um eine Übereinstimmung zu finden

Also wirklich, diese implizite Sortierung ist dasselbe wie:

db.products.find({_id: {$gt: ObjectId("4fdbaf608b446b0477000142" )}}).sort({_id:1}).limit(1);

Wenn Sie der Abfrage weitere Kriterien hinzugefügt haben, um zu qualifizieren, wie das „nächste“ Produkt zu finden ist (z. B. eine category ), könnte die Abfrage einen anderen Index verwenden und die Reihenfolge ist möglicherweise nicht wie erwartet.

Sie können die Indexnutzung mit explain() überprüfen .