stanley355
stanley355

Reputation: 171

MongoDB - Get the sum of an object in an array

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 a similar issue? I'm confused with the query :)

Upvotes: 3

Views: 6718

Answers (3)

Sahil Thummar
Sahil Thummar

Reputation: 2490

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
}

Upvotes: 0

Yong Shun
Yong Shun

Reputation: 51160

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

Upvotes: 4

Kareem Adel
Kareem Adel

Reputation: 704

use aggregate

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

Upvotes: 3

Related Questions