我试图在多个文档中获得不同货币金额的总和,但我正在努力进行聚合。
初始文档(子文档是嵌入的,所以不需要展开):
const products = [
{
title: 'product1',
price: [
{
amount: 100,
currency: 'USD',
},
{
amount: 20,
currency: 'EUR',
}
]
},
{
title: 'product2',
price: [
{
amount: 330,
currency: 'USD',
},
]
},
{
title: 'product3',
price: [
{
amount: 50,
currency: 'EUR',
},
]
},
];
预期结果:
const output = {
grossIncome: [
{
amount: 430,
currency: 'USD',
},
{
amount: 70,
currency: 'EUR',
},
]
};
提前感谢!
您需要这个聚合查询:
- 第一个
$unwind
解构数组,可以得到每个元素。 $group
按货币计算,$sum
按金额计算。
db.collection.aggregate([
{
"$unwind": "$price"
},
{
"$group": {
"_id": "$price.currency",
"amount": {
"$sum": "$price.amount"
}
}
}
])
例子