Reputation: 171
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
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
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"
}
})
Upvotes: 4
Reputation: 704
use aggregate
db.getCollection('myCollection').aggregate([
{ "$group": {
"_id": "$tempId",
"totalPrice": {
"$sum": { "$sum": "$book.price" }
},
"totalPromo": {
"$sum": { "$sum": "$book.promo" }
}
} }
])
Upvotes: 3