Bạn sẽ có thể đạt được điều này bằng cách sử dụng $unwind
và $group
trong quy trình tổng hợp của bạn. Việc đầu tiên này làm phẳng mỗi thuộc tính thành một tài liệu duy nhất và trên những thuộc tính bạn có thể nhóm theo giá trị thuộc tính.
Cuối cùng, bạn có thể sử dụng $project
để lấy tên mong muốn cho attributeValue
:
db.collection.aggregate([
{
$unwind: "$attributeSet"
},
{
$group: {
_id: "$attributeSet.value",
data: {
"$addToSet": {
productId: "$productId"
}
}
}
},
{
"$project": {
_id: 0,
data: 1,
attributeValue: "$_id"
}
}
])
Xem ví dụ đơn giản này trên mongoplayground: https://mongoplayground.net/p/VASadZnDedc