0

共通の 1 つのフィールドを持つ 2 つの異なるドキュメント セットに対して結合操作を実行したいと考えています。次のセットアップがあります。

コレクションA

{
    "common_key" : "v1" ,
    "a2" : "v2",
    "a3" : "v3",
    .....
}

コレクションB

{
    "common_key" : "v1" ,
    "b2" : "z2",
    "b3" : "z3",
    .....
}

mapReduce は 1 つのコレクションでしか機能しないため、A と B の内容を Collection にマージしましたCombo_dataTypeさらに、タイプが A か B かを示すフィールドをもう 1 つ追加しました。

コレクションコンボ = A + B

{
    "common_key" : "v1" ,
    "b2" : "z2",
    "b3" : "z3",
    "_dataType" : "B",
    .....
}

{
    "common_key" : "v1" ,
    "a2" : "v2",
    "a3" : "v3",
    "_dataType" : "A",
    .....
}

common_key各データ型 A と Bが同じであるすべてのドキュメントに対して出力するように mapReduce 関数を記述したい

{
    "common_key" : v1 ,
    "A" : [
            { 
              "a2" : "v2",
              "a3" : "v3",
              ...
             },
             ...
           ],
    "B" : [
            {
                "b2" : "z2",
                "b3" : "z3",
                .....
           },
           ..
           ]
}

ポインタやヘルプは大歓迎です

4

1 に答える 1

0

集計フレームワークを使用したクイック アンサー

db.coll.aggregate({
    "$group": {
        "_id": "$common_key",
        "A": {
            "$push": {
                "$cond": [
                    {
                        "$eq": [
                            "$_dataType",
                            "A"
                        ]
                    },
                    {
                        "a2": "$a2",
                        "a3": "$a3"
                        // you have to put all A dataType field here
                    }, 
                    {}
                ]
            }
        },
        "B": {
            "$push": {
                "$cond": [
                    {
                        "$eq": [
                            "$_dataType",
                            "B"
                        ]
                    },
                    {
                        "b2": "$b2",
                        "b3": "$b3"
                        // you have to put all B dataType field here
                    },
                    {}
                ]
            }
        }
    }
})

短所: A および B データ型のすべてのフィールドを書き込んで射影する必要があり、各配列 (A および B) に空のオブジェクトがあります。

于 2013-07-11T18:02:51.610 に答える