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"
}
バージョン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
}
}
])