Javascript mongodb组和子详细信息
如何使用子详细信息/子文档的总和按国家进行一般分组 如何使用子详细信息/子文档的总和按国家进行一般分组Javascript mongodb组和子详细信息,javascript,mongodb,Javascript,Mongodb,如何使用子详细信息/子文档的总和按国家进行一般分组 如何使用子详细信息/子文档的总和按国家进行一般分组 [{ Country: 'USA', amount: 10, detailA: [{ Country: 'USA', amount: 20, },{ Country: 'MEX', amount: 20, },{ Country: 'RUSK',
[{
Country: 'USA',
amount: 10,
detailA: [{
Country: 'USA',
amount: 20,
},{
Country: 'MEX',
amount: 20,
},{
Country: 'RUSK',
amount: 30,
}],
detailB: [{
Country: 'USA',
amount: 90,
}]
},{
Country: 'RUSK',
amount: 30,
detailA: [{
Country: 'USA',
amount: 50,
},{
Country: 'MEX',
amount: 60,
}],
detailB: [{
Country: 'MEX',
amount: 10,
}]
}];
按国家分组的产出
美国170
罗斯克60
MEX 90代码:
使用聚合管道:
db.getCollection('countries').aggregate([
{
$project: {
'root.Country': '$Country',
'root.amount': '$amount',
detail: {
$concatArrays: [ '$detailA', '$detailB'],
},
},
},
{
$project: {
detail: {
$concatArrays: [ '$detail', ['$root'] ],
},
},
},
{ $unwind: '$detail' },
{
$group: {
_id: '$detail.Country',
amount: { $sum: '$detail.amount' }
}
}
]);
说明:
我们需要将所有数据置于同一级别,这样我们就可以使用$group
阶段。
该阶段之前的文件形状应为:
{ Country, amount }
在第一个投影阶段,两个detailA
和detailB
数组合并到detail
数组中。此外,根字段国家
,金额
也分组在根
子文档下
在第二个投影中,root
对象被推入detail
数组
然后,detail
数组被“无意识地”放入单个文档中
最后,我们按
国家
分组,并对金额
s求和。您没有“城市”字段;你们的意思是按国家分组吗?固定问题,谢谢。我的回答对你们有用吗?