大家下午好,
我在处理MongoDB 3.4中的聚合查询时遇到了一些困难。我的问题要求我将聚合查询的结果推送到一个名为categories
的空数组中,我成功地使用以下代码完成了这个任务:
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
看起来像这样:
[ { _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 } ]
接下来我有以下任务:
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.
问题在于似乎在我的.toArray()
方法内,data
参数有时表现得像数组,有时不是。例如,如果我想仅将num
键的值添加到categories
数组中,如下所示:categories.push(...data["num"])
,则会出现错误,指出undefined is not iterable
。由于我无法迭代每个
data.num
键,因此无法提取其值并将其添加到所有data.num
值的运行总和中。我对这里发生的事情有什么误解吗?
{category: "All}
文档作为data
数组的一部分。我会在你的答案下面发布我的答案,这样你就可以看到我的意图。 - m00saca