Mongoose的資料檢驗與聚合管道
阿新 • • 發佈:2020-08-10
一、什麼是mongoose的資料檢驗
使用者通過mongoose給mongodb資料庫增加資料的時候,對資料的合法性進行的驗證
二、mongoose校驗引數
- required:表示這個資料必須傳入
- max:用於Number型別, 最大值
- min:用於Number型別, 最小值
- enum:列舉型別,要求資料必須滿足列舉值enum:['0', '1', '2']
- match:增加的資料必須符合match(正則)的規則
- maxlength:最大長度
- minlength:最小長度
var mongoose = require('mongoose') var UserSchema = mongoose.Schema({ name: { type: String, // 指定型別 trim: true, // 修飾符,去除左右空格 required: true, // 表示必須傳入 validate(name) { // 自定義校驗器 return name.length >= 2 } }, sn: { type: String, index: true, // 索引 set(val) { // 自定義修飾符 return val }, minlength: 10, // 最小長度 maxlength: 30, // 最大長度 match: /^sn(.*)i/ // 正則:要求必須以sn開頭,忽略大小寫 }, age: { type: Number, min: 0, // 最小值 max: 150, // 最大值 }, status: { type: Number, default: 1, // 預設值 enum: [0, 1, 2, 3] // status的值必須在列舉的陣列中 } }) module.exports = mongoose.model('Users', UserSchema, 'users')
三、mongoose的聚合管道
1.order表關聯order_item
var OrderModel = require('./model/order') // 查詢order表中每個訂單的商品 OrderModel.aggregate([ { $lookup: { from: 'order_item', // 表示被關聯的表 localField: 'order_id', // 關聯條件 foreignField: 'order_id', as: 'items' // 將查詢到的資料放入items }, { $match: { 'all_price': { $gte: 90 } } // 表示條件為all_price>=90 } } ], (err, docs) => { if (err) return console.log(err) console.log(JSON.stringify(docs)) })
2.order_item關聯order
/* 查詢order_item找出商品名稱是酸奶的商品,對應的訂單的訂單號,以及訂單的總價 */ var OrderItemModel = require('./model/order_item') var OrderModel = require('./model/order') var mongoose = require('mongoose') // 方法一: OrderItemModel.find({'_id': '5eff4d743dd01fc7bce3b2bb'}, (err, docs) => { console.log(docs) var order_item = JSON.parse(JSON.stringify(docs)) var order_id = docs[0].order_id OrderModel.find({'order_id': order_id}, (err, docs) => { order_itme[0].order_info = docs[0] console.log(order_item) }) }) // 方法二: // mongoose中獲取ObjectId:mongoose.Types.ObjectId OrderItemModel.aggregate([ { $lookup: { from: 'order', // 表示被關聯的表 localField: 'order_id', // 關聯條件 foreignField: 'order_id', as: 'order_info', // 將查詢到的資料放入order_info } }, { $match: {_id: mongoose.Types.ObjectId('5eff4d743dd01fc7bce3b2bb')} } ], (err, docs) => { console.log(JSON.stringify(docs)) })