Mongodb 对每个文档数组中的所有相同字段求和 - Map-Reduce

Mongodb sum all the same fields in array foreach document - Map-Reduce

我的数据库中有这样的文档:

{
"first_name": "John",
"last_name": "Bolt",
"account": [
  {
    "cardnumber": "4844615935257045",
    "cardtype": "jcb",
    "currency": "CZK",
    "balance": 4924.99
  },
  {
    "cardnumber": "3552058835710041",
    "cardtype": "jcb",
    "currency": "BRL",
    "balance": 9630.38
  },
  {
    "cardnumber": "5108757163721629",
    "cardtype": "visa-electron",
    "currency": "CNY",
    "balance": 6574.18
  }
}

我的问题是 - 如何分别为每个人计算所有账户的余额?我应该使用这个 Map-Reduce 还是聚合框架?

使用聚合框架。

这将为您提供一个包含两个属性的对象数组,idbalance,其中 id 包含用户名。

db.document.aggregate([{
  $unwind: "$account"
}, {
  $group: {
    _id: {$concat: [ "$first_name", " ", "$last_name" ]},
    "balance": {
      $sum: "$account.balance"
    }
  }
}]);

免责声明:未经测试。

Ps:我当然希望这是虚假信息。 Here's another answer 这可能会有所帮助。