检查多个Mongoose集合中特定字段的总和
我正在尝试为餐厅预订mongoose模式,但如果所有collections中的“人物”价值超过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('/'); } }) });
如何通过所有的收集过滤来找出当你把所有的值加起来的人数是多less?
您需要使用聚合pipe道来合计人数。 如果计数小于50,则创build新预留,否则显示一些消息。
为此,您可以使用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('/'); } }) });
您可以使用聚合pipe道 – 请参阅:
特别是$sum
操作符:
顺便说一句,从节点v4.x而不是写:
var newReservation = {people: people, date: date, name: name, email: email};
你可以使用更短的语法:
var newReservation = {people, date, name, email};
看到:
- 数据库连接error handling和尚
- 如何从一个Node.js / Express应用程序中的Mongoose pre hook中查询?
- 我如何得到一个值数组,而不是在mongo /节点/mongoose的JSON数组?
- 如何在mongoose和node.js中查询根据值来计算用户(类似于mysql distinct)?
- 在两个不同的字段mongodb + node.js中search值
- 从node.js中的node-mongodb-native获取MongoDB服务器版本
- 如何更新mongodb本地nodejs驱动程序中的多个文件?
- MongoDB查找查询花费太多时间
- 如何正确创build像trello,Mongoose和Angularjs的卡片显示