MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como devolver os valores das variantes de cada produto se esse produto for uma variante?


Você deve conseguir isso usando $unwind e $group em seu pipeline de agregação. Isso primeiro nivela cada atributo em um único documento e nesses você pode agrupar pelo valor do atributo.

Finalmente, você pode usar $project para obter o nome desejado para attributeValue :
db.collection.aggregate([
  {
    $unwind: "$attributeSet"
  },
  {
    $group: {
      _id: "$attributeSet.value",
      data: {
        "$addToSet": {
          productId: "$productId"
        }
      }
    }
  },
  {
    "$project": {
      _id: 0,
      data: 1,
      attributeValue: "$_id"
    }
  }
])

Veja este exemplo simplificado no mongoplayground:https://mongoplayground.net/p/VASadZnDedc