与最后一个mongodb一起使用Sum

与最后一个mongodb一起使用Sum,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,用例:我有以下数据: {"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":"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和version的组合进行初始化

我想获得账号1-2和2-1的最新版本以及它们的金额总和

预期产出:

我正在使用以下查询:

db.getCollection('account').aggregate([
{ "$sort": { "accountNumber": 1 } },
{ "$unwind": "$details"},
 { "$group": {    

     "_id": "$details.version.accountGroup",
    "Latestversion": { "$last": "$$ROOT" },
    "total": { 
        $sum: "$details.version.amount" 
    } 
}

}])
它获取属于一个组的所有版本的总和

电流输出:

我是Mongodb的新手,非常感谢您的帮助。期待您的回复。

您需要两个$group阶段

第一个$组查找每个帐户组的最新文档,第二个$组汇总最新文档中的金额

差不多

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-2", total: 300}, {"accountNumber":"2-1", total: 200}
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" } 
    }
  }
])
{"accountNumber":"1-1", detail:{"number": "1","accountGroup":"1", "editable":"false" , "amount":100 }}