Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何合计用户支付的所有金额_Node.js_Reactjs_Mongodb_Mongoose - Fatal编程技术网

Node.js 如何合计用户支付的所有金额

Node.js 如何合计用户支付的所有金额,node.js,reactjs,mongodb,mongoose,Node.js,Reactjs,Mongodb,Mongoose,我发现将订购商品的客户支付的所有金额相加是很困难的 订单模式 const orderschema=new Mongoose.Schema({ 已创建:{type:Date,默认值:Date.now()}, 金额:{type:Number,默认值:0} 用户:[{type:Mongoose.Schema.ObjectId,ref:'Users'}] ... }) 路线 Get('/total amount',total amount) 控制器 Exports.total-amount=()=>

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

订单模式

const orderschema=new Mongoose.Schema({
已创建:{type:Date,默认值:Date.now()},
金额:{type:Number,默认值:0}
用户:[{type:Mongoose.Schema.ObjectId,ref:'Users'}]
...
})
路线

Get('/total amount',total amount)
控制器

Exports.total-amount=()=>{
Order.find()。。。
}
我不知道在这里添加什么才能得到所有客户的总收入

使用NodeJS和MongoDB

感谢您的帮助

您可以在这样的聚合阶段使用:

if(response[0].total)
  res.status(200).send(response[0].total)
else
  res.status(404).send()
  • 第一个
    $group
    all(没有
    \u id
    是对所有值进行分组)
  • 然后创建字段
    total
    ,它是所有
    金额的总和
  • 还有一个可选阶段,
    $project
    只输出
    总计
    字段
范例

要使用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())
}
注意:操作是使用mongoose模型完成的(在本例中为
订单
)。调用
aggregate
方法的方式与调用
find
方法的方式相同,例如:而不是do

yourModel.find()

答复如下:

[
  {
    "total": 6
  }
]
因此,您甚至可以更新控制器以添加如下
if/else
块:

if(response[0].total)
  res.status(200).send(response[0].total)
else
  res.status(404).send()
您可以在如下聚合阶段中使用:

if(response[0].total)
  res.status(200).send(response[0].total)
else
  res.status(404).send()
  • 第一个
    $group
    all(没有
    \u id
    是对所有值进行分组)
  • 然后创建字段
    total
    ,它是所有
    金额的总和
  • 还有一个可选阶段,
    $project
    只输出
    总计
    字段
范例

要使用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())
}
注意:操作是使用mongoose模型完成的(在本例中为
订单
)。调用
aggregate
方法的方式与调用
find
方法的方式相同,例如:而不是do

yourModel.find()

答复如下:

[
  {
    "total": 6
  }
]
因此,您甚至可以更新控制器以添加如下
if/else
块:

if(response[0].total)
  res.status(200).send(response[0].total)
else
  res.status(404).send()

谢谢@j.f.我想我还是很想念它。我不熟悉聚合。如何将其添加到控制器中。另外,我没有将db定义为order db.order.aggregate({“$group”:{“\U id”:null,“total”:{“$sum”:“$amount”}}},{“$project”:{“\U id”:0})我已经更新了我的答案。希望有帮助。谢谢。它起作用了。接受我诚挚的谢意谢谢你@j.f我想我还是很想念它。我不熟悉聚合。如何将其添加到控制器中。另外,我没有将db定义为order db.order.aggregate({“$group”:{“\U id”:null,“total”:{“$sum”:“$amount”}}},{“$project”:{“\U id”:0})我已经更新了我的答案。希望有帮助。谢谢。它起作用了。接受我诚挚的谢意