2016-09-24 3 views
0

У меня есть две разные коллекции мангуст следующим образом:MongoDB поиск + группа по с мангуста

{ "_id" : 1, "countryId" : 1, "price" : 12, "quantity" : 24 } 
{ "_id" : 2, "countryId" : 2, "price" : 20, "quantity" : 1 } 
{ "_id" : 3 } 
{ "_id" : 4, "countryId" : 1, "price" : 12, "quantity" : 24 } 



{ "_id" : 1, "id" : 1, description: "Colombia"} 
{ "_id" : 3, "id" : 2, description: "Mexic" } 

Я пытаюсь объединить их, так что я могу получить результат следующим образом:

{"country":"Colombia","total":48} 
{"country":"Mexic","total":1} 

Я пробовал много вещей, но он всегда терпит неудачу. Это последняя версия того, над чем я работаю (я изменил данные, но вы поняли эту идею):

Model.aggregate([ 
     { 
     $lookup: 
     { 
      from: "countryList", 
      localField: "countryId", 
      foreignField: "id", 
      as: "country" 
     }, 
     { 
     $project: { 
        quantity:1, country:{$country:"$countryList.description"} 
       } 
     },{ 
     $group:{ 
       { _id : null, qtyCountry: { $sum: "$quantity" } } 
     } 
     } 
    }],function (err, result) { 
     if (err) { 
      console.log(err); 
     } else { 
      console.log(result) 
     } 
    } 
); 

Возможно ли это?

ответ

2

Да, это возможно. Вы можете попробовать следующий конвейер агрегации.

var pipeline = [ 
        {"$match":{"countryId":{"$exists":true}}}, 
        {"$group" : {"_id":"$countryId", "quantity":{"$sum":"$quantity"}}}, 
        {"$lookup":{"from":"countryList","localField":"_id", "foreignField":"id","as":"country"}}, 
        {"$unwind":"$country"}, 
        {"$project": {"country":"$country.description", "total":"$quantity", _id:0}} 
       ] 

Пример вывода:

{ "country" : "Mexic", "total" : 1 } 
{ "country" : "Colombia", "total" : 48 } 
+0

он работает до поиска, то разматывает результат в пустом массиве; /, если я удалить размотать я получаю { "страна": [], "всего": 4234}, {"country": [], "total": 43} –

+0

@ Cam.phiefr обновил мой ответ ... Изменена коллекция поиска из страны в странуList – 4J41

+1

Спасибо, отлично работает !. –

Смежные вопросы