Sie sollten dies mit $unwind
erreichen können und $group
in Ihrer Aggregationspipeline. Dadurch wird jedes Attribut zunächst zu einem einzelnen Dokument zusammengefasst, und in diesen können Sie nach dem Attributwert gruppieren.
Schließlich können Sie $project
verwenden um den gewünschten Namen für attributeValue
zu erhalten :
db.collection.aggregate([
{
$unwind: "$attributeSet"
},
{
$group: {
_id: "$attributeSet.value",
data: {
"$addToSet": {
productId: "$productId"
}
}
}
},
{
"$project": {
_id: 0,
data: 1,
attributeValue: "$_id"
}
}
])
Sehen Sie sich dieses vereinfachte Beispiel auf mongoplayground an:https://mongoplayground.net/p/VASadZnDedc