Ich führe ein Aggregat durch und schaue mir an, wie man innerhalb der ursprünglichen Aggregatmethode die Fähigkeit, die SUM
Gesamtsumme weiter zu zerlegen, durchführt. Momentan gebe ich Gesamtereignisse innerhalb einer Entfernung zurück, gruppiert nach Cluster-Code. Ich möchte die Gesamtzählung mit jeder Kategorie aufgeteilt haben.Zählvariable innerhalb zurückgegebener aggregierter Ergebnisse
Ich weiß, ich kann so
var events = Events.aggregate(
[
{
$match : {
"location.loc" : {
$geoWithin : {
$centerSphere : [[long,lat], milesToRadian(radius) ]
}
}
}
},
{
$group : {
_id : { 'cluster_code' : "$location.cluster_code"},
count : { $sum : 1 }
}
}
]
)
eine $group
Abfrage durchführen Ich bin bewusst, dass ich einen zusätzlichen Parameter {"category" : "$category"}
in meiner $group
Abfrage hinzufügen kann dies für jede Kategorie zu brechen. Ich kann dann eine Gruppierungsmethode ausführen, um das richtige Format zu erstellen, nach dem ich suche. Das fühlt sich an, als könnte ich die Abfrage verbessern.
Was ich versuche zu erreichen ist eine SUM Zählung dann eine Zählung für jede category
. Ähnliches:
{
"_id": {
"cluster_code": "FK",
},
"Run" : 2,
"Swim" : 1
"count": 3
},
Ist dies in einer einzigen Aggregatabfrage möglich?
UPDATE
Beispiel Dummy Dokument
{
_id : "df",
"location" : {
//...
},
"category" : "Run"
}
Wie sieht Ihr Beispieldokument aus? – Astro
Aktualisiert oben. 'category' ist eine Top-Level-Zeichenfolge – Allreadyhome