Ich habe diese Art von einfacher AggregatabfrageGesamtabfrageleistung Sortierung nach isodate
db.SomeCollection.aggregate([{
"$match": {
"Id": "someId"
}
}, {
"$sort": {
"someISODatePropertyName": 1
}
}, {
"$unwind": {
"path": "$somePropertyName"
}
}], {
allowDiskUse: true
})
diese Abfrage gibt 50 Elemente höchstens und dauert 10 Sekunden.
Wenn ich einfach die Art Eigenschaft mit einem numerischen einem ändern: abzuschließen wenigen Millisekunden dauert
db.SomeCollection.aggregate([{
"$match": {
"Id": "someId"
}
}, {
"$sort": {
"someNumericPropertyName": 1
}
}, {
"$unwind": {
"path": "$somePropertyName"
}
}], {
allowDiskUse: true
})
die Abfrage.
Gibt es ein Sortierproblem mit ISODate-Eigenschaften?
Ich kann wirklich nicht verstehen, warum es in der ersten Version so lange dauert.
Vielen Dank.
UPDATE
dies ist das Abfrageergebnis mit "erklären" Flag auf true gesetzt (Anmerkung: auf dem isodate Feld ein Index ist):
{
"waitedMS" : NumberLong(0),
"stages" : [
{
"$cursor" : {
"query" : {
"StreamId" : "5b8cc895-c626-5994-95d4-b9ac89fb66ed"
},
"sort" : {
"CommitStamp" : 1
},
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "vrp-events-prod.Commits",
"indexFilterSet" : false,
"parsedQuery" : {
"StreamId" : {
"$eq" : "5b8cc895-c626-5994-95d4-b9ac89fb66ed"
}
},
"winningPlan" : {
"stage" : "FETCH",
"filter" : {
"StreamId" : {
"$eq" : "5b8cc895-c626-5994-95d4-b9ac89fb66ed"
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"CommitStamp" : 1
},
"indexName" : "CommitStamp_Index",
"isMultiKey" : false,
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 1,
"direction" : "forward",
"indexBounds" : {
"CommitStamp" : [
"[MinKey, MaxKey]"
]
}
}
},
"rejectedPlans" : []
}
}
},
{
"$unwind" : {
"path" : "$Events"
}
}
],
"ok" : 1
}
ja, ich vergaß zu erwähnen, dass ich schon auf diesem Feld einen Index haben (und btw nicht auf dem numerischen ...) , was ich so seltsam finde ist die dramatische Performance-Unterschied zwischen einem numerischen Feld und einem Datumsfeld während einer einfachen Sortieroperation –
Ich denke über die Lösung nach. Ich bin überrascht, dass der Index nicht ausreicht. Können Sie versuchen, Ihre Abfragen mit explain als Option auszuführen und zu sehen, was es sagt? https://docs.mongodb.com/v3.0/reference/method/db.collection.aggregate/ – Tiramisu
Danke, Ich aktualisierte den Beitrag mit dem Explain-Abfrage-Ergebnis. –