0
我有一些文件看起来像这样:聚合函数可以与字段名称中的变量一起使用吗?
{
(...stuff...)
something: {
first: {
0: 3,
1: 5,
2: 2
},
second: {
0: 1,
1: 9,
2: 7
}
}
}
对于这个问题简单起见,我假设我$match
只打这一个文件。我想要做的是,在aggregate命令,加起来0
S,并添加了1
S,并添加了2
S,这样我就可以产生这样的:
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
都在一起等等?
我希望有一个通配符或某些东西,这样我就不会有最长的命令,当我将所有24个字段添加到子文档 – DiMono 2013-04-30 12:28:25
@DiMono:根据我在答案结尾的评论,那么MapReduce或应用程序逻辑可能是更合适的解决方案。原始问题只提到元素0/1/2,但如果您有24个字段,则聚合框架将变得更加冗长。如果您只是在单个文档(或少量文档)上进行这种计算,则只需在应用程序逻辑中迭代文档就可能是最有效的。如果您需要针对一系列文档运行计算,那将有利于使用MapReduce。 – Stennie 2013-05-01 13:34:44
当然,您可以始终以编程方式构建Aggregation Framework管道,因此您不必自己写出24个字段。对于单个文档来说这仍然是过分的。根据您需要运行此查询的频率,另一个需要考虑的选项是[预汇总](http://docs.mongodb.org/manual/use-cases/pre-aggregated-reports/),以便您可以调整总和为您的嵌套文档设置相同的更新值。 – Stennie 2013-05-01 13:38:19