I'm using the MongoDB aggregation framework to try and collect some totals from our dataset.
Here is an example of the source data:
{
"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"
}
}
}
}
What I'm looking to do is separate each profile.(low|medium|high).(mp3|oga|m4a)
into a separate document/item for aggregation, so for example:
{
"_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"
}
]
}
Is this sort of thing possible using the Aggregation Framework, or is this something on MapReduce can do?