我的收藏品中有以下物品:
{ "_id" : ObjectId("58f39ea016101165e01a40ff"),
"sex" : "Male",
"first_name" : "Andrew",
"last_name" : "Fernandez",
"nationality" : "Somalia",
"credit" : [
{
"type" : "jcb",
"number" : "5100178605311200",
"currency" : "CZK",
"balance" : "4409.71"
}
]}
问题是:从每个对象计算所有余额总和并按货币分组的最简单方法是什么?至于我,问题是信用是一个数组,信用数组中可能有很多对象。
答案 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' }
}
}
]
)
那么,这里发生了什么?