如何计算用户支付的所有金额



我发现很难将订购商品的客户支付的所有金额相加

订单模式

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

  • 第一个$groupall(没有_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()

最新更新