Ich habe einen ziemlich kleinen Datensatz von 63.000 Dokumenten (2,5 GB insgesamt). Beispiel für Dokument:
{
_id : "[uniqueId]",
FormId : 10,
Name : "Name of form",
IsComplete : true,
Sections : [ many sections and can be large ]
}
Ich möchte die Gesamtzahl der Dokumente von FormId erhalten. Ich bekomme schnell Ergebnis (.15sec) auf dieser Abfrage:
db.getCollection('collection').aggregate([
{ $sort : { FormId : 1 } }, //Index exists on FormId
{ $group : { _id : "$FormId", count : { $sum : 1 } } },
{ $sort : { "count" : -1 } }
])
Mein Problem ist, ich brauche eine Zählung der Dokumente zu erhalten, wo { „IsComplete“: true}. Ich habe zwei Indizes, die auf beiden Eigenschaften basieren, aber ich stelle fest, dass mit dem Operator $ match alle Dokumente gescannt werden. Wie kann man die $ Gruppenanzahl effizient filtern?
Sie brauchen hier nicht die erste '$ sort'-Stufe. – styvane
@Styvane ohne die Gruppe $ sort stage $ dauert 10 Sekunden. Warum sollte das passieren? Beginnend mit $ sort uses index. – JayJohnsonDesigns