MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment renvoyer les valeurs de variante de chaque produit si ce produit est une variante ?

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