使用Sum和Last mongodb

时间:2017-05-18 09:53:20

标签: mongodb mongodb-query aggregation-framework

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的新手,感谢任何帮助。期待回应。

1 个答案:

答案 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