Vous devriez pouvoir y parvenir en utilisant $unwind
et $group
dans votre pipeline d'agrégation. Cela aplatit d'abord chaque attribut dans un seul document et sur ceux-ci, vous pouvez regrouper par la valeur de l'attribut.
Enfin, vous pouvez utiliser $project
pour obtenir le nom souhaité pour attributeValue
:
db.collection.aggregate([
{
$unwind: "$attributeSet"
},
{
$group: {
_id: "$attributeSet.value",
data: {
"$addToSet": {
productId: "$productId"
}
}
}
},
{
"$project": {
_id: 0,
data: 1,
attributeValue: "$_id"
}
}
])
Voir cet exemple simplifié sur mongoplayground :https://mongoplayground.net/p/VASadZnDedc