Дано:
db.invoices.find()
[{"_id":"585c291cb035648543000006","client":"58333caa36f02d14009c50ee","status":"open","amount":150},
{"_id":"585c2906b035648543000005","client":"58333caa36f02d14009c50ee","status":"sent","amount":175},
{"_id":"585c28fbb035648543000004","client":"58333caa36f02d14009c50ee","status":"paid","amount":375},
{"_id":"585c28bab035648543000003","client":"58333caa36f02d14009c50ee","status":"open","amount":400},
{"_id":"585c2872b035648543000001","client":"583335ad36f02d14009c3f88","status":"sent","amount":120},
{"_id":"585c297db035648543000007","client":"583335ad36f02d14009c3f88","status":"paid","amount":150}]
Что лучший способ агрегировать эту модель так, что суммы каждого состояния возвращаются в объект с именем отсчеты для каждого клиента:
[{
_id: "58333caa36f02d14009c50ee",
amount: 1100,
counts: {
open: 2,
sent: 1,
paid: 1
}
}, {
_id: "583335ad36f02d14009c3f88",
amount: 270,
counts: {
open: 0,
sent: 1,
paid: 1
}
}]
до сих пор я получил информацию агрегирующего правильно, но результаты являются плоскими, и я не уверен, как получить отсчеты вложенные как свойства объекта с именем отсчетов:
[{
$project: {
client: 1,
status: 1,
amount: 1
}
}, {
$group: {
_id: '$client',
amount: { $sum: '$amount'},
open: {
$sum: {
$cond: {
if: {
$eq: ["$status", 'open']
},
then: 1,
else: 0
}
}
},
sent: {
$sum: {
$cond: {
if: {
$eq: ["$status", 'sent']
},
then: 1,
else: 0
}
}
},
paid: {
$sum: {
$cond: {
if: {
$eq: ["$status", 'paid']
},
then: 1,
else: 0
}
}
}
}
}]
, которая возвращает:
[{
_id: "58333caa36f02d14009c50ee",
amount: 1100,
open: 2,
sent: 1,
paid: 1
}, {
_id: "583335ad36f02d14009c3f88",
amount: 270,
open: 0,
sent: 1,
paid: 1
}]
Я предположил, что я мог бы получить эти отсчеты вложенного путем определения имя_поля в $ группы, как что-то вроде:
$group: {
_id: '$client',
amount: { $sum: '$amount'},
"counts.open": {
$sum: {
$cond: {
if: {
$eq: ["$status", 'open']
},
then: 1,
else: 0
}
}
},
....
}
но Монго не позволяют ". в любом определенном поле имени во время шага агрегации группы. Можно ли это сделать во время агрегации манго?