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