2017-05-18 55 views
0

用例:我有以下數據:使用金額與去年的MongoDB

{"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)。一個組可以有多個版本。賬戶號碼是由的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

您需要兩個$group階段。

第一個$group找到每個account group的最新文檔和第二個$group從最新文檔求和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

{"accountNumber":"1-1", detail:{"number": "1","accountGroup":"1", "editable":"false" , "amount":100 }} 
+0

謝謝,這個岩石。 –