Node.js 检查多个Mongoose集合中特定字段的总和
我正在尝试为餐厅预订mongoose模式,但如果所有集合中的“人”值都超过50,我不希望人们能够预订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.
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
运算符:
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语句中添加任何内容,可能是导致问题的原因,但它现在起作用了。感谢所有这一切都没有错,功能正在工作,但我需要在数据库中至少有一个集合。如果为空,则显示错误