Как использовать несколько $ group в подмассиве объекта mongodb агрегат - PullRequest
0 голосов
/ 18 января 2019

Я использую 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,           
        }
    ]   
}

Я искал все в Переполнении стека, попробуйте использовать 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
            }
        ]
    }
]

, пожалуйста, помогите мне или подскажите, какие этапы агрегации должны использовать в этом случае

...