0
我正在使用MongoDB聚合框架嘗試從我們的數據集中收集一些總數。Mongo聚合並將子對象分隔爲單獨的文檔
這裏是源數據的一個例子:
{
"urn": "urn:content:epi:0001",
"duration": 3450272,
"profiles": {
"low": {
"mp3": {
"size": 8623059425,
"url": "0001_low.mp3"
},
"oga": {
"size": 8623059425,
"url": "0001_low.oga"
},
"m4a": {
"size": 8623059425,
"url": "0001_low.m4a"
}
},
"medium": {
"mp3": {
"size": 8623059425,
"url": "0001_medium.mp3"
},
"oga": {
"size": 8623059425,
"url": "0001_medium.oga"
},
"m4a": {
"size": 8623059425,
"url": "0001_medium.m4a"
}
},
"high": {
"mp3": {
"size": 8623059425,
"url": "0001_high.mp3"
},
"oga": {
"size": 8623059425,
"url": "0001_high.oga"
},
"m4a": {
"size": 8623059425,
"url": "0001_high.m4a"
}
}
}
}
什麼我希望做的是單獨的每個profile.(low|medium|high).(mp3|oga|m4a)
成聚集一個單獨的文件/項目,因此,例如:
{
"_id": null,
"files": [
{
"urn": "urn:content:epi:0001",
"duration": 3450272,
"size": 8623059425,
"url": "0001_low.mp3"
},
{
"urn": "urn:content:epi:0001",
"duration": 3450272,
"size": 8623059425,
"url": "0001_low.oga"
},
{
"urn": "urn:content:epi:0001",
"duration": 3450272,
"size": 8623059425,
"url": "0001_low.m4a"
},
{
"urn": "urn:content:epi:0001",
"duration": 3450272,
"size": 8623059425,
"url": "0001_medium.mp3"
},
{
"urn": "urn:content:epi:0001",
"duration": 3450272,
"size": 8623059425,
"url": "0001_medium.oga"
},
{
"urn": "urn:content:epi:0001",
"duration": 3450272,
"size": 8623059425,
"url": "0001_medium.m4a"
},
{
"urn": "urn:content:epi:0001",
"duration": 3450272,
"size": 8623059425,
"url": "0001_high.mp3"
},
{
"urn": "urn:content:epi:0001",
"duration": 3450272,
"size": 8623059425,
"url": "0001_high.oga"
},
{
"urn": "urn:content:epi:0001",
"duration": 3450272,
"size": 8623059425,
"url": "0001_high.m4a"
}
]
}
這種事情可能使用聚合框架,或者這是MapReduce上可以做到的事情嗎?
你有什麼試過?如果結構使用像'fileType:「mp3」'而不是'low:{「mp3」:...}}'的特定屬性的數組,那麼實現使用AF會簡單很多。 – WiredPrairie
而且,根據你使用數據的方式,在客戶端處理你想要的結構(可能效率很高)很容易。 – WiredPrairie
不幸的是,我無法改變結構,因爲它已經被系統的多個領域廣泛使用。 我同意也許將一些邏輯留給客戶端,而不是試圖在聚合步驟中完成所有這些,可能是要走的路,實際上我現在已經實現了。 我只是想知道在聚合步驟中是否完全可以做到這一點:) – chillievodka