Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript mongodb组和子详细信息_Javascript_Mongodb - Fatal编程技术网

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求和。

您没有“城市”字段;你们的意思是按国家分组吗?固定问题,谢谢。我的回答对你们有用吗?