2017-10-30 2 views
0

Server-Mongo-Version ist 3.4.4. Verbunden durch Studio 3T. Wenn ich so in IntelliShell AbfrageDaten können nicht mit aggregate in mongodb abgerufen werden

db.orders.aggregate([ 
    { $limit: 10 }, 
    { $skip: 10 } 
]) 

ich nichts zurückgegeben.
Allerdings, wenn ich die $ Limit und $ wechseln überspringen,

db.orders.aggregate([ 
    { $skip: 10 }, 
    { $limit: 10 } 
]) 

Es funktioniert gut.

+0

Nun haben Sie gefragt * "Holen Sie mir nur 10 Ergebnisse und dann über 10 von ihnen überspringen" *, was sonst würden Sie ehrlich erwarten? Auf der anderen Seite sagt die zweite Aussage * "Überspringe 10 Ergebnisse und gib dann die nächsten 10 zurück" *. Es ist also nicht schwer zu erkennen, wie unterschiedlich diese sind, wenn man sie semantisch formuliert. –

+0

Siehe auch [$ skip + $ limit Sequenzoptimierung] (https://docs.mongodb.com/manual/core/aggregation-pipeline-optimization/#skip-limit-sequence-optimization), die genau zeigt, wie die Sequenz intern kommt optimiert und ein direktes Beispiel dafür, warum Ihr erster Versuch fehlschlägt. Kurz gesagt, die Sekunde wird auf '{$ limit: 20}, {$ skip: 10}' optimiert. –

+0

Aber warum behandelt Mongodb sie nicht als das gleiche? –

Antwort

1

Das ist mein Verständnis: Die $limit: 10 bedeutet ‚ich zehn Ergebnis wollen‘, und die $skip bedeutet ‚Ich weiß nicht, die ersten Zehner brauchen‘.
So bekomme ich 0 Ergebnisse durch die erste Abfrage, 10-20 Ergebnisse durch die zweite Abfrage erhalten.

Verwandte Themen