Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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 检查多个Mongoose集合中特定字段的总和_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 检查多个Mongoose集合中特定字段的总和

Node.js 检查多个Mongoose集合中特定字段的总和,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在尝试为餐厅预订mongoose模式,但如果所有集合中的“人”值都超过50,我不希望人们能够预订 var reservationSchema = new mongoose.Schema ({ people: Number, date: String, name: String, email: String }); var Reservation = mongoose.model("Reservation", reservationSchema); app.

我正在尝试为餐厅预订mongoose模式,但如果所有集合中的“人”值都超过50,我不希望人们能够预订

var reservationSchema = new mongoose.Schema ({
    people: Number,
    date: String,
    name: String,
    email: String
});

var Reservation = mongoose.model("Reservation", reservationSchema);

app.post('/reservation', (req, res) => {
    var people = parseFloat(req.body.people);
    var date = req.body.date;
    var name = req.body.name;
    var email = req.body.email;   

    var newReservation = {people: people, date: date, name: name, email: email};
    Reservation.create(newReservation, (err, newlyCreated) => {
        if(err) {
            console.log(err);
        } 
        else {
            res.redirect('/');
        }
    })
});

当您将来自人员的所有值相加时,如何筛选所有集合以查找数字?

您需要使用聚合管道来计算人员的总数。如果计数小于50,则创建新预订,否则显示一些消息

为此,您可以使用
statics
方法

var reservationSchema = new mongoose.Schema ({
    people: Number,
    date: String,
    name: String,
    email: String
});


reservationSchema.statics = {
    createIfSpaceAvailable : function(newReservation, done){
        var Reservation = this;
        Reservation.aggregate([
        {
         $group:{
             _id: null,
             noOfPeople: { $sum: "$people"}
         }
        }], 
        function(err, result){
        if(err){
            return done(err);
        }
        else if(result[0].noOfPeople > 50){
            // do something
        }
        else{
            Reservation.create(newReservation, (err, newlyCreated) => {
                if(err) {
                     return done(err);
                } 
                else {
                     return done();
                }
            })
        }
    })
   }
};
var Reservation = mongoose.model("Reservation", reservationSchema);

app.post('/reservation', (req, res) => {
    var people = parseFloat(req.body.people);
    var date = req.body.date;
    var name = req.body.name;
    var email = req.body.email;   

    var newReservation = {people: people, date: date, name: name, email: email};
    Reservation.createIfSpaceAvailable(newReservation, (err, newlyCreated) => {
        if(err) {
            console.log(err);
        } 
        else {
            res.redirect('/');
        }
    })
});

您可以使用聚合管道-请参阅:

特别是
$sum
运算符:

顺便说一下,由于节点v4.x没有写入:

var newReservation = {people: people, date: date, name: name, email: email};
您可以使用较短的语法:

var newReservation = {people, date, name, email};
见:


为什么
\u id:null
?@TalhaAwan感谢您的回答,但我得到了TypeError:无法读取未定义的属性'noOfPeople'。@JKshort,
console.log(result)
以检查数据是如何返回的。我不确定它是否是
result.noOfPeople
result[0]。noOfPeople
@TalhaAwan这是result[0]。noOfPeople,我没有在if语句中添加任何内容,可能是导致问题的原因,但它现在起作用了。感谢所有这一切都没有错,功能正在工作,但我需要在数据库中至少有一个集合。如果为空,则显示错误