一、什么是mongoose的数据检验

用户通过mongoose给mongodb数据库增加数据的时候,对数据的合法性进行的验证

二、mongoose校验参数

  • required:表示这个数据必须传入
  • max:用于Number类型, 最大值
  • min:用于Number类型, 最小值
  • enum:枚举类型,要求数据必须满足枚举值enum:[‘0’, ‘1’, ‘2’]
  • match:增加的数据必须符合match(正则)的规则
  • maxlength:最大长度
  • minlength:最小长度 ```javascript 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’)

  1. <a name="W7EKh"></a>
  2. ### 三、mongoose的聚合管道
  3. <a name="hgR3G"></a>
  4. #### 1.order表关联order_item
  5. ```javascript
  6. var OrderModel = require('./model/order')
  7. // 查询order表中每个订单的商品
  8. OrderModel.aggregate([
  9. {
  10. $lookup: {
  11. from: 'order_item', // 表示被关联的表
  12. localField: 'order_id', // 关联条件
  13. foreignField: 'order_id',
  14. as: 'items' // 将查询到的数据放入items
  15. }, {
  16. $match: { 'all_price': { $gte: 90 } } // 表示条件为all_price>=90
  17. }
  18. }
  19. ], (err, docs) => {
  20. if (err) return console.log(err)
  21. console.log(JSON.stringify(docs))
  22. })

2.order_item关联order

  1. /* 查询order_item找出商品名称是酸奶的商品,对应的订单的订单号,以及订单的总价 */
  2. var OrderItemModel = require('./model/order_item')
  3. var OrderModel = require('./model/order')
  4. var mongoose = require('mongoose')
  5. // 方法一:
  6. OrderItemModel.find({'_id': '5eff4d743dd01fc7bce3b2bb'}, (err, docs) => {
  7. console.log(docs)
  8. var order_item = JSON.parse(JSON.stringify(docs))
  9. var order_id = docs[0].order_id
  10. OrderModel.find({'order_id': order_id}, (err, docs) => {
  11. order_itme[0].order_info = docs[0]
  12. console.log(order_item)
  13. })
  14. })
  15. // 方法二:
  16. // mongoose中获取ObjectId:mongoose.Types.ObjectId
  17. OrderItemModel.aggregate([
  18. {
  19. $lookup: {
  20. from: 'order', // 表示被关联的表
  21. localField: 'order_id', // 关联条件
  22. foreignField: 'order_id',
  23. as: 'order_info', // 将查询到的数据放入order_info
  24. }
  25. }, {
  26. $match: {_id: mongoose.Types.ObjectId('5eff4d743dd01fc7bce3b2bb')}
  27. }
  28. ], (err, docs) => {
  29. console.log(JSON.stringify(docs))
  30. })

3.多表关联

  1. var ArticleModel = require('./model/article')
  2. /* 查询文章信息,并显示文章的分类以及文章的作者的信息 */
  3. ArticleModel.aggregate([
  4. {
  5. $lookup: {
  6. from: 'articlecate',
  7. localField: 'cid',
  8. foreignField: '_id',
  9. as: 'cate'
  10. }
  11. }, {
  12. $lookup: {
  13. from: 'user',
  14. localField: 'author_id',
  15. foreignField: '_id',
  16. as: 'user'
  17. }
  18. }
  19. ], (err, docs) => {
  20. console.log(JSON.stringify(docs))
  21. })