Трябва да можете да постигнете това с помощта на $unwind
и $group
във вашия тръбопровод за агрегиране. Това първо изравнява всеки атрибут в един документ и върху тези, които можете да групирате по стойността на атрибута.
И накрая, можете да използвате $project
за да получите желаното име за attributeValue
:
db.collection.aggregate([
{
$unwind: "$attributeSet"
},
{
$group: {
_id: "$attributeSet.value",
data: {
"$addToSet": {
productId: "$productId"
}
}
}
},
{
"$project": {
_id: 0,
data: 1,
attributeValue: "$_id"
}
}
])
Вижте този опростен пример на mongoplayground:https://mongoplayground.net/p/VASadZnDedc