Mongodb: $ in operator vs viele Einzelabfragen

  • Ich weiß, dass MongoDB viele Anfragen pro Sekunde verarbeiten kann, aber lassen Sie uns sagen, dass ich aufgrund seiner _id eine Menge Dokumente einer Sammlung abfragen muss. Was klingt besser: ein $ in das _id-Attribut mit allen IDs einbauen, die ich erhalten möchte, oder eine Schleife über findOne-Abfragen ziehen?

    08 August 2016
    JohnnyHK
1 answer
  • Ich würde definitiv die $ in-Abfrage verwenden und ein Array von _ids bereitstellen.

    Beispiel:

     db.collection.find({
        "key": {
            "$in": [
                ObjectId("xxx"),
                ObjectId("yyy"),
                ObjectId("zzz")
            ]
        }
    })
     

    Warum?

    • Wenn Sie eine Schleife haben, gibt es ein gewisses Maß an Setup und Teardown für jede Abfrage, die Cursor erzeugt und erschöpft, wodurch Overhead erzeugt wird.
    • Wenn Sie dies nicht auf einem lokalen Computer durchführen, wird für jede Anfrage auch ein tcp / ip-Overhead erstellt. Lokal könnten Sie Domain-Sockets verwenden.
    • Standardmäßig wird ein Index für "_id" erstellt, und das Sammeln einer Gruppe von Dokumenten, die in einer Stapelanforderung zurückgegeben werden sollen, sollte extrem schnell sein, sodass dies nicht erforderlich ist Unterteilen Sie dies in kleinere Abfragen.

    Es gibt zusätzliche Dokumentation hier , wenn Sie es ausprobieren möchten.

    10 November 2016
    Tyler Brock