我有一些看起来像这样的文件:
{
(...stuff...)
something: {
first: {
0: 3,
1: 5,
2: 2
},
second: {
0: 1,
1: 9,
2: 7
}
}
}
为了简化这个问题,我假设我的$match
只能点击这一个文件。我想要做的是,在一个聚合命令中,将0
加起来,然后将1
加起来,然后将2
加起来,这样我就可以产生这样的东西:
something.0: 4 (something.first.0 + something.second.0)
something.1: 14 (something.first.1 + something.second.1)
something.2: 9 (something.first.2 + something.second.2)
这是可以完成的事情,还是我需要更改我的文档架构以重新排列嵌套文档,以便所有0
都在一起等等?
答案 0 :(得分:0)
如果您知道要汇总的所有数组的名称,可以使用MongoDB 2.2+中的聚合框架和$add
operator的投影:
db.something.aggregate(
{ $project: {
something: {
0: { $add: [ "$something.first.0", "$something.second.0" ] },
1: { $add: [ "$something.first.1", "$something.second.1" ] },
2: { $add: [ "$something.first.2", "$something.second.2" ] }
}
}}
)
示例输出:
{
"result" : [
{
"_id" : ObjectId("517ae4914bc9ade96ca6402d"),
"something" : {
"0" : 4,
"1" : 14,
"2" : 9
}
}
],
"ok" : 1
}
如果您不知道名称(即您正在尝试添加文档中每个数组元素的第0个元素),则需要使用MapReduce或在应用程序代码中实现逻辑。