Home > Blockchain >  Mongodb : Get the sum of an object in an Array
Mongodb : Get the sum of an object in an Array

Time:04-02

Hi I'm very new to Mongodb, I'm trying to get the total price and promo of the below MongoDB data with document.collection.find and $add functionality:

Data:

[
{"catalog":"A",
 "book":[
  {
   "title":"Mermaid yang terdampar",
   "price":90000,
   "promo":15000
  },
  {
   "title":"Srigala berbulu domba",
   "price":30000,
   "promo":15000
  }
}]

And my expected result would be sth like this:

[
  {
    "catalog": "A",
    "totalPrice": 140000,
    "totalPromo": 32000
  },
]

Does anybody ever encounter similar issue? I'm confused with the Query :)

CodePudding user response:

use aggregate

db.getCollection('myCollection').aggregate([
    { "$group": {
        "_id": "$tempId",
        "totalPrice": { 
            "$sum": { "$sum": "$book.price" } 
        },
        "totalPromo": { 
            "$sum": { "$sum": "$book.promo" } 
        }
    } }
])

CodePudding user response:

For .find() query, you can direct use the $sum operator.

db.collection.find({},
{
  catalog: 1,
  totalSum: {
    $sum: "$book.price"
  },
  totalPromo: {
    $sum: "$book.promo"
  }
})

Sample Mongo Playground

CodePudding user response:

Using $group (aggregation)

db.getCollection('catlog').aggregate([{ 
    $group: {
        _id: "$_id",
        catalog: { $first: "$catalog" },
        totalPrice: { "$sum": { $sum: "$book.price" } },
        totalPromo: { "$sum": { $sum: "$book.promo" } }
    }
}])

Output will be:

{
    "_id" : ObjectId("6247b33cffc5b6f714769fbb"),
    "catalog" : "A",
    "totalPrice" : 120000,
    "totalPromo" : 30000
}
  • Related