web-dev-qa-db-ja.com

MongoDBは複数のアレイを巻き戻します

Mongodbには、次の構造のドキュメントがあります。

{
    "_id" : ObjectId("52d017d4b60fb046cdaf4851"),
    "dates" : [
        1399518702000,
        1399126333000,
        1399209192000,
        1399027545000
    ],
    "dress_number" : "4",
    "name" : "J. Evans",
    "numbers" : [
        "5982",
        "5983",
        "5984",
        "5985"
    ]
}

複数の配列からデータを巻き戻し、配列からペアの要素のみを取得することは可能ですか?

{
    "dates": "1399518702000",
    "numbers": "5982"
},
{
    "dates": "1399126333000",
    "numbers": "5983"
},
{
    "dates": "1399209192000",
    "numbers": "5984"
},
{
    "dates": "1399027545000",
    "numbers": "5985"
}
10
corry

バージョン3.2以降では、$unwind両方の配列、$cmpインデックス、および$match等しいインデックスのみ。

このソリューションでは、サンプルドキュメントしかない場合に備えて、作成した内容を入力します。さらに多くのドキュメントがある場合、出力で何が得られるかはわかりませんが、ドキュメントの_idでグループ化することで解決できます。

db.test.aggregate([
    {
        $unwind: {
            path: '$dates',
            includeArrayIndex: 'dates_index',
        }
    },
    {
        $unwind: {
            path: '$numbers',
            includeArrayIndex: 'numbers_index',
        }
    },
    {
        $project: {
            dates: 1,
            numbers: 1,
            compare: {
                $cmp: ['$dates_index', '$numbers_index']
            }
        }
    },
    {
        $match: {
            compare: 0
        }
    },
    {
        $project: {
            _id: 0,
            dates: 1,
            numbers: 1
        }
    }
])
13
TomG