gpt4 book ai didi

javascript - MongoDB 汇总不同文档中数组中的项目数?

转载 作者:行者123 更新时间:2023-11-30 12:17:07 24 4
gpt4 key购买 nike

这是我的 MongoDB 集合架构:

company: String
model: String
tags: [String]

我需要对其进行汇总,以便获得以下输出:

[{
"_id": {
"company": "Lenovo",
"model": "T400"
},
"tags": {
tag: "SomeTag"
count: 124 // number of times, this tag was found in `Lenovo T400`
}
}...]

我尝试执行以下操作:

var aggParams = {};
aggParams.push({ $unwind: '$tags' });
aggParams.push({ $group: {
_id: { company: '$company', model: '$model' },
tags: { $push: { tag: '$tags', count: { $sum: 1 } } },
}});

但是我得到了以下错误:

invalid operator '$sum'

使用聚合的正确方法是什么?

最佳答案

您需要处理$unwind在一个数组上,以便在聚合中有意义地处理它。另外,您将添加到数组中并单独“计数”阶段。以及参数本身“数组”中的聚合管道,而不是您定义的对象:

Model.aggregate([
{ "$unwind": "$tags" },
{ "$group": {
"_id": {
"company": "$company",
"model": "$model",
"tag": "$tags"
},
"count": { "$sum": 1 }
}},
{ "$group": {
"_id": {
"company": "$_id.company",
"model": "$_id.model",
},
"tags": { "$push": { "tag": "$_id.tag", "count": "$count" }
}}
], function(err,result) {

})

所以两个$group阶段在这里完成工作。一个总结公司和模型中的标签,另一个仅对“公司”和“模型”进行分组,并将不同的标签和计数添加到数组中。

关于javascript - MongoDB 汇总不同文档中数组中的项目数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32155090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com