0

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?

4

1 に答える 1

0

いいえ、集約フレームワークの$unwindステージは、単一のコレクション ドキュメントを複数のパイプライン ドキュメントに変換する唯一の方法であり、$unwindあなたのようなサブドキュメントではなく、配列でのみ機能します。

于 2013-05-30T19:06:36.443 に答える