У меня есть эта схема
var salesExpenseSchema = new Schema({
date : {
month: Number
},
sales: [{amount : Schema.Types.Decimal128}],
expenses: [{amount : Schema.Types.Decimal128}]
});
Пример записи базы данных подобен этому
{
_id:'5dbac5dfa1488240cbc4f838',
date:{month:11},
sales:[{amount:3000},{amount:5000}],
expenses: [{amount:5000},{amount:500}]
},
{
_id:'5dbac5dfa1488240cbc4f838',
date:{month:10},
sales:[{amount:2000},{amount:5000}],
expenses: [{amount:500},{amount:800}]
},
{
_id:'5dbac5dfa1488240cbc4f838',
date:{month:09},
sales:[{amount:2000},{amount:4000}],
expenses: [{amount:200},{amount:300}]
}
Теперь я хочу получить Суммирование продаж и расходов.
Я использовал Aggregate с $ unwind для продаж и расходов, как показано ниже:
SalesExpense.aggregate([
{$unwind: "$sales"},
{$unwind: "$expenses"},
{$group:{
_id:'$_id',
sales:{$sum: "$sales.sellPrices"},
expenses:{$sum: "$expenses.amount"},
}
},
Но проблема в том ... Если в одном документе массива есть данные, а в другом нет данных, тоон дает 0, т. е. реальное суммирование не получено. То есть, если есть продажи, но нет расходов, то их сумма становится 0, и наоборот.
Я хочу получитьсуммирование как для продаж, так и для расходов независимо от того, у кого нет данных. Как мне этого добиться?
РЕДАКТИРОВАТЬ:
Я отредактировал вопрос и добавил объект даты в мою схему и в записи базы данных: я хочу сделать этосуммирование, основанное на каждом месяце, то есть ... каждый месяц, чтобы иметь свои собственные продажи и расходы ... В некотором роде график с каждым месяцем, имеющим свои собственные продажи и расходы.
Я пытался использовать $группа перед $ project
{$group:{
_id:'$date.month'}}
Но, похоже, не дает ожидаемых результатов.
Я хочу вывод, подобный этому:
[
{
"month": "11",
"sales": {
"$numberDecimal": "8000"
},
"expenses": {
"$numberDecimal": "5500"
}
},
{
"month": "10",
"sales": {
"$numberDecimal": "7000"
},
"expenses": {
"$numberDecimal": "1100"
}
},
{
"month": "09",
"sales": {
"$numberDecimal": "6000"
},
"expenses": {
"$numberDecimal": "500"
}
},
]
Как я могу достичьэто?