Wir Version die meisten unserer Sammlungen in Mongodb. Der gewählte Versionierung Mechanismus ist wie folgt:MongoDB Aggregation Abfrage läuft sehr langsam
{ "docId" : 174, "v" : 1, "attr1": 165 } /*version 1 */
{ "docId" : 174, "v" : 2, "attr1": 165, "attr2": "A-1" }
{ "docId" : 174, "v" : 3, "attr1": 184, "attr2" : "A-1" }
Also, wenn wir unsere Anfragen führen wir immer verwenden müssen, um auf diese Weise die Aggregation Rahmen, um sicherzustellen neuesten Versionen unserer Objekte zu erhalten:
db.docs.aggregate([
{"$sort":{"docId":-1,"v":-1}},
{"$group":{"_id":"$docId","doc":{"$first":"$$ROOT"}}}
{"$match":{<query>}}
]);
Die Problem mit diesem Ansatz ist, sobald Sie Ihre Gruppierung getan haben, haben Sie eine Reihe von Daten im Speicher, die nichts mit Ihrer Sammlung zu tun hat und somit Ihre Indizes nicht verwendet werden können.
Je mehr Dokumente Ihre Sammlung hat, desto langsamer wird die Abfrage.
Gibt es eine Möglichkeit, dies zu beschleunigen?
Wenn nicht, werde ich prüfen, zu einem der Ansätze in diesem guten Beitrag definiert zu bewegen: http://www.askasya.com/post/trackversions/
Warum haben Sie nicht $ Match in der ersten Stufe? –
Fügen Sie dem Feld "docId" Ihres Dokuments einen Index hinzu. –
@DanieleTassone Ich fürchte, das ist keine Option. Erklärung ist in Verbindung, die ich zur Verfügung stellte. Grundsätzlich, wenn Sie am Anfang filtern, werden Sie mit Versionen enden, die nicht die neuesten sind, aber die Sortiergruppenphase wird sie als solche betrachten. Es ist ein häufiger Fehler, wenn eine solche Versionierung durchgeführt wird. – jbernal