如何在子数组对象mongodb聚合中使用多个$ group

时间:2019-01-18 09:06:44

标签: node.js mongodb aggregation-framework aggregation

我正在将mongodb用于nodejs服务器。使用聚合时遇到了一个问题。以下是我的设计文档

{  
    "app_id" : "a6e3a",    
    "ref" : "google.com",
    "samples" : [ 
        {          
            "num_visitor" : 2,
            "spend" : 285,                      
        }, 
        {           
            "num_visitor" : 3,
            "spend" : 236,                       
        }
    ],
    "location" : [ 
        {
            "country_code" : "DE",
            "vis" : 1,         
        }, 
        {
            "country_code" : "DE",
            "vis" : 1,          
        }, 
        {
            "country_code" : "US",
            "vis" : 2,            
        },
        {
            "country_code" : "US",
            "vis" : 1,            
        }
    ],
    "device" : [ 
        {
            "type" : " isFireFox 64",
            "tran" : 1,            
        }, 
        {
            "type" : " isFireFox 64",
            "tran" : 1,            
        },         
        {
            "device" : " isChrome isWebKit 71",
            "tran" : 3,           
        }
    ]   
}

我已经在Stack Overflow中进行了全部搜索,尝试使用mapReduce,但无法获得预期的结果,我希望按app_id进行分组,并按子数组位置分组,或者按字段和总和值分组设备。在这里,我的管道一直卡在这里

 [ {
            $match: {
                ref: "google.com"                
            }
        },

        {
            $project: {
                _id: 0,
                location: 1,
                device: 1
            }
        },

        {
            $group: {
                _id: "$location.country_code",
                tags: { $sum: "$location.views" }
            }
        }
]

我的实际预期输出是

[
    {
        _id:"a6e3a",
        total_visitor:5,
        location:[
            {
                country_code:"DE",
                vis:2
            },
            {
                country_code:"US",
                vis:3
            }
        ],
        device:[
            {
                type:"isFireFox 64",
                tran:2
            },
            {
                type:"isChrome isWebKit 71",
                tran:2
            }
        ]
    }
]

在这种情况下,请帮助我或建议我使用什么聚合管道阶段

0 个答案:

没有答案