查找按键分组的数组中的elems总和

时间:2017-04-16 20:25:14

标签: mongodb

我的收藏品中有以下物品:

{ "_id" : ObjectId("58f39ea016101165e01a40ff"),
"sex" : "Male",
"first_name" : "Andrew",
"last_name" : "Fernandez",
"nationality" : "Somalia",
"credit" : [ 
    {
        "type" : "jcb",
        "number" : "5100178605311200",
        "currency" : "CZK",
        "balance" : "4409.71"
    }
]}

问题是:从每个对象计算所有余额总和并按货币分组的最简单方法是什么?至于我,问题是信用是一个数组,信用数组中可能有很多对象。

1 个答案:

答案 0 :(得分:1)

好吧,看起来对我来说并不困难。我发布了我的回答,以便将来的任何人都可以看到这篇文章,这可能会有所帮助。

首先,我们需要在credit个对象中将字符串转换为float。为此,我们需要遍历我们的集合:

db.people.find().forEach( function (x) {   
  x.credit.forEach( function (credit) {
      credit.balance = parseFloat( credit.balance );
  })
  db.people.save(x);
});

这将转换我们的数据,以便我们将余额保存为浮点数。最后,我们需要构造我们的查询:

db.people.aggregate( 
  [ 
    { $unwind : "$credit" },
    { $group: { 
        _id: "$credit.currency", 
        restOfMoney: { $sum: '$credit.balance' } 
      }
    }
  ]
)

那么,这里发生了什么?

  1. Unwind为数组中的每个项目添加额外的行
  2. 小组根据货币制作小组,我们计算余额总和