Guten Tag produziert Array,Iterieren durch alle von MongoDB Aggregationsanfrage
ich mit Aggregationsanfragen in MongoDB 3.4 eine wirklich harte Zeit arbeiten habe. Ich habe ein Problem, das mich bittet zu tun, die Ergebnisse meiner Aggregations Abfrage in ein leeres Array schieben genannt categories
, die ich erfolgreich mit diesem Code zu tun in der Lage:
var categories = [];
database.collection("item").aggregate([{
$group : {
_id : "$category",
num : {$sum : 1}
}},
{$sort:{_id:1}}]).toArray(function(err, data){
categories.push(...data);
callback(categories);
console.log(categories);
})
}
categories
wie folgt aussieht:
[ { _id: 'Apparel', num: 6 },
{ _id: 'Books', num: 3 },
{ _id: 'Electronics', num: 3 },
{ _id: 'Kitchen', num: 3 },
{ _id: 'Office', num: 2 },
{ _id: 'Stickers', num: 2 },
{ _id: 'Swag', num: 2 },
{ _id: 'Umbrellas', num: 2 } ]
Next ich habe folgende Aufgabe:
In addition to the categories created by your aggregation query, include a document for category "All" in the array of categories passed to the callback. The "All" category should contain the total number of items across all categories as its value for "num". The most efficient way to calculate this value is to iterate through the array of categories produced by your aggregation query, summing counts of items in each category.
Das Problem ist, dass es scheint, wie in meiner .toArray()
Methode der data
Parameter manchmal wie ein Array und manchmal nicht funktioniert. Zum Beispiel, wenn ich vielleicht nur den Wert des num
-Schlüssels zum categories
-Array hinzufügen wollte, so: categories.push(...data["num"])
bekomme ich einen Fehler unter der Angabe undefined is not iterable
.
Da ich nicht über jeden Schlüssel data.num
iterieren kann, kann ich seinen Wert nicht extrahieren und es zu einer laufenden Summe aller Werte data.num
hinzufügen.
Was verstehe ich nicht, was hier vor sich geht?
Ihre Lösung ist nah an dem, was ich suchte und ich schätze Ihre Antwort. Ich denke, insgesamt nach Ihrem Input habe ich ein besseres Verständnis dafür, womit ich es zu tun habe. Das einzige, was mir nicht klar war, war die Notwendigkeit, den neuen '{category:" All} '-Dokumentteil des' data'-Arrays zu erstellen. Ich werde meine Antwort unter Ihre schreiben, damit Sie sehen können, was ich wollte. – m00saca