Tengo un problema con la consulta de MongoDB . Nuestra colección se llama products y los datos se colocan de esta manera.
{ "_id":"61b823681975ba537915cb0c", "salesInfo":{ "_id":"61b823681975ba537915c23c", "salesDate":[ { "_id":"61b3aa4a7b04b30cd0a76b06", "salesQuantity":100, "soldPieces":36, "holdPieces":0 }, { "_id":"61b3aa4a7b04b30cd0a75506", "salesQuantity":100, "soldPieces":36, "holdPieces":0 } ] } } Quiero agregar un nuevo field llamado percentageSold vendido dentro de una matriz de objetos, y el valor debe ser el cálculo de la siguiente fórmula ((soldPieces + holdPieces) / salesQuantity * 100) .
Mi consulta es esta, pero devuelve null para la propiedad percentageSold .
db.products.aggregate( [ { $addFields: { "salesInfo.salesDate.percentageSold": {$divide: [{$add: ["$salesDate.soldPieces", "$salesDate.holdPieces"]}, {$multiply: ["$salesDate.salesQuantity", 100]}]} } } ])Como salesInfo.salesDate es un campo de matriz, debe usar un operador de matriz como $map para realizar una operación por elementos.
db.products.aggregate([ { $addFields: { "salesInfo.salesDate": { "$map": { "input": "$salesInfo.salesDate", "as": "s", "in": { "_id": "$$s._id", "salesQuantity": "$$s.salesQuantity", "soldPieces": "$$s.soldPieces", "holdPieces": "$$s.holdPieces", "percentageSold": { $divide: [ { $add: [ "$$s.soldPieces", "$$s.holdPieces" ] }, { $multiply: [ "$$s.salesQuantity", 100 ] } ] } } } } } } ])Aquí está el parque infantil de Mongo para su referencia.