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"
}
})
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
}