UseCase:我有以下数据:
{"accountNumber":"1-1", "details":["version":{ "number": "1","accountGroup":"1", "editable":"false" , "amount":100 }]}
{"accountNumber":"1-2", "details":[version":{ "number": "2", "accountGroup":"1", "editable":"false" , "amount":200}]}
{"accountNumber":"2-1", "details":[version":{ "number": "1", "accountGroup":"2", "editable":"false", "amount":200 }]}
其中:我的文档是帐户。每条记录都有一个 accountGroup (1,2)。一个组可以有多个版本。 AccountNumber由AccountGroup&组合初始化。版本
我想获得(accountNumber 1-2& 2-1)帐户的最新版本及其金额总和。
预期输出:
{accountNumber:2-1}, {accountNumber: 1-2}, total: 400 (sum of amount of the latest versions of the account group)
我使用以下查询:
db.getCollection('account').aggregate([
{ "$sort": { "accountNumber": 1 } },
{ "$unwind": "$details"},
{ "$group": {
"_id": "$details.version.accountGroup",
"Latestversion": { "$last": "$$ROOT" },
"total": {
$sum: "$details.version.amount"
}
}
}])
它获取属于某个组的所有版本的总和。
当前输出:
{"accountNumber": "1-2", total: 300}, {"accountNumber":"2-1", total: 200}
我是Mongodb的新手,感谢任何帮助。期待回应。
答案 0 :(得分:1)
您需要两个$group
个阶段。
首先$group
找到每个account group
的最新文档,然后从最新文档中找到$group
的{{1}}。{/ p>
像
这样的东西amount
您可以将结构更新到下方,然后移除aggregate([
{ "$sort": { "accountNumber": 1 } },
{ "$unwind": "$details"},
{ "$group": {
"_id": "$details.version.accountGroup",
"latest": { "$last": "$$ROOT" }
}
},
{ "$group": {
"_id": null,
"accountNumbers": { $push:"$latest.accountNumber" },
"total": { $sum: "$latest.details.version.amount" }
}
}
])
。
$unwind