Was ist schneller: 'find (). limit (1)' oder 'findOne ()' in MongoDB / Mongoose?

8

Ich habe Quellen gelesen, die sagen, MongoDBs findOne() ist viel langsamer als find().limit(1) , aber dann habe ich auch etwas anderes gehört. Was ist eigentlich die aktuelle Wahrheit?

Artikel vom März 2013 : " Es ist wesentlich schneller, find () + limit () zu verwenden, da findOne () das Dokument immer liest + zurückgibt, wenn es existiert.find () gibt nur einen Cursor zurück (oder nicht) und liest die Daten nur, wenn Sie den Cursor durchlaufen . "

SE Antwort von 2011 : "Wenn das Dokument find (). limit (1) abgerufen wird, werden die Bestellungen von Magnitude Speed ​​Difference scheint zu verschwinden. Außerdem konnte ich die Hauptgeschwindigkeitsdifferenz mit dem MongoDB JavaScript-Treiber nicht reproduzieren. Ich habe ursprünglich einen Vergleich mit dem MongoDB Java-Treiber durchgeführt. "

Ich hoffe, was auch immer die Antwort ist, es ist auch konsistent mit der Verwendung von Mongoose find().sort().limit(1) und findOne() .

    
Melissa 15.10.2015, 19:16
quelle

1 Antwort

13

Beide sind gleich schnell.

Wenn Sie find().limit(1) ausführen, wird keine Abfrage an den Server gesendet. Sie bereiten nur die Seite des Abfrageclients vor. Solange Sie keine Dokumente abrufen, können Sie den Cursor, also die Abfrage, ändern (zB indem Sie sort hinzufügen).

Wenn Sie also nur das find().limit(1) benchmarken, werden Sie feststellen, dass es viel schneller ist, weil die Abfrage nicht ausgeführt wird. Vermutlich benchmarkst du nutzlosen Code.

    
Jasny - Arnold Daniels 15.10.2015 19:31
quelle