Суммирование документов с использованием агрегата - PullRequest
0 голосов
/ 18 марта 2019

Данные выглядят так:

{
 "id":1234,
  "quantity":10,
  "price":45
},
{
 "id":"1235",
 "quantity":15,
 "price":85
}

Что я хочу получить в результате

{
 "id":1234,
  "quantity":"10",
  "price":45
},
{
 "id":"1235",
 "quantity":15,
 "price":85
},
{
 "id":"",
 "quantity":25,
 "price":130
}

Я могу получить только третий документ, выполнив

{"$group":{
   "_id":"",
   "quantity":{"$sum":"$quantity"},
   "price":{"$sum":"$price"}
}} 

Но я хотел увидеть все три документа вместе. Возможно ли это даже с использованием агрегатов?

1 Ответ

0 голосов
/ 18 марта 2019

Попробуйте это

db.collection.aggregate([
{
$facet:{
   sum:[
    {"$group":{
       "_id":null,
       "quantity":{"$sum":"$quantity"},
       "price":{"$sum":"$price"}
    }}
    ],
    existing:[
    {"$group":{
       "_id":"$id",
       "quantity":{"$sum":"$quantity"},
       "price":{"$sum":"$price"}
    }}
    ]
    }
},
{
$project:{
     items: { $concatArrays: [ "$sum", "$existing" ] }
    }
},
{
 $unwind:{
     path:"$items",
     preserveNullAndEmptyArrays:true
     }
},
{$replaceRoot:{newRoot:"$items"}}

])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...