Dans mongodb, il existe des documents dans la structure suivante:
{
"_id" : ObjectId("52d017d4b60fb046cdaf4851"),
"dates" : [
1399518702000,
1399126333000,
1399209192000,
1399027545000
],
"dress_number" : "4",
"name" : "J. Evans",
"numbers" : [
"5982",
"5983",
"5984",
"5985"
]
}
Est-il possible de dérouler les données de plusieurs tableaux et d'obtenir uniquement des éléments appariés à partir des tableaux:
{
"dates": "1399518702000",
"numbers": "5982"
},
{
"dates": "1399126333000",
"numbers": "5983"
},
{
"dates": "1399209192000",
"numbers": "5984"
},
{
"dates": "1399027545000",
"numbers": "5985"
}
Depuis la version 3.2, vous pouvez le faire avec $unwind
sur les deux tableaux, $cmp
les index et $match
uniquement les index égaux.
Cette solution remplira ce que vous avez écrit au cas où vous ne disposez que de l'exemple de document. Si vous avez plus de documents, je ne sais pas ce que vous attendez de la sortie, mais c'est résoluble en les groupant par _id du document.
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
}
}
])