I have a collection Item
with fields _id
, price
, and project
as well as a collection Project
with fields _id
and name
.
The items have different prices, so I want to group the items by price
and count how many items are in each group and save the value as quantity
.
Then I want to compute quantity
and price
to get the total amount. But I want to calculate some fees. The fees should be computed as totalPrice * (1 + 10/100) + 5 * quantity
.
So I have tried using $project
to calculate each fee and it works, but I cannot create a final calculated field with the total price including the fees. I think I am not able to use a calculated field in the same $project
?
I have used the following code, but totalPriceWithFees
becomes 0:
Item.aggregate([
{
$group: {
_id: {
project: '$project',
price: '$price'
},
quantity: { $sum: 1 }
}
},
{
$project: {
quantity: 1,
totalPriceWithoutFees: {
$multiply: ['$_id.price', '$quantity']
},
feesPercentage: {
$multiply: ['$_id.price', 0.1]
},
feesAbsolute: {
$multiply: ['$quantity', 5]
},
fees: {
$sum: ['feesPercentage', 'feesAbsolute']
},
totalPriceWithFees: {
$sum: ['$totalPriceWithoutFees', '$fees']
},
}
}
{
$lookup: {
from: 'Project',
localField: '_id.project',
foreignField: '_id',
as: 'project'
}
}
])
Also, I want to populate the project. I have only saved the project id, so I need to populate to get the project name. I am not sure if it's possible with normal populate()
in Mongoose, so I have tried using $lookup
, but it also doesn't work. The field project
just becomes empty.
via Jamgreen
No comments:
Post a Comment