我发现很难将订购商品的客户支付的所有金额相加
订单模式
const orderschema = new Mongoose.Schema({
created: { type: Date, default: Date.now() },
amount: { type: Number, default: 0 }
User: [{ type: Mongoose.Schema.ObjectId, ref: 'Users'}]
...
})
路线
Get('/total-amount', total-amount)
控制器
Exports.total-amount = () => {
Order.find()...
}
我不知道在这里加什么才能得到所有客户的总金额。
使用NodeJS和MongoDB。
感谢您对的帮助
您可以在这样的聚合阶段中使用$sum
:
- 第一个
$group
all(没有_id
将对所有值进行分组( - 然后创建字段
total
,它是所有amount
的总和 - 和一个可选的阶段,
$project
只输出total
字段
db.order.aggregate({
"$group": {
"_id": null,
"total": {
"$sum": "$amount"
}
}
},
{
"$project": {
"_id": 0
}
})
示例
要使用nodeJS和Mongoose添加到控制器中,您可以使用以下代码:
Exports.total - amount = (req, res) => {
Order.aggregate({
"$group": {
"_id": null,
"total": {
"$sum": "$amount"
}
}
}, {
"$project": {
"_id": 0
}
}).then(response => {
res.status(200).send(response)
}).catch(e => res.status(400).send())
}
请注意,操作是如何使用猫鼬模型完成的(在本例中为Order
(。您调用aggregate
方法的方式与调用find
方法的方式相同,例如:而不是执行
yourModel.find()
是否
yourModel.aggregate()
回应是:
[
{
"total": 6
}
]
因此,即使你可以更新你的控制器,添加一个像这样的if/else
块:
if(response[0].total)
res.status(200).send(response[0].total)
else
res.status(404).send()