Mongoose模式的擴展

模式的擴展

默認值

默認值的類型:

固定值、即便生成mongodb

代碼展現:    

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var AppleSchema = new mongoose.Schema({
  appleName : {
    type : String,
    default : '江蘇紅果'
  },
  madeTime : {
    type : Date,
    default : Date.now //new Date()
  }
});
var Apple = mongoose.model('Apple',AppleSchema);
var apple1 = new Apple();
console.log('User:',apple1);數據庫

模式修飾符

類型:

預約義的模式修飾符、自定義的setter修飾符、自定義的getter修飾符app

代碼展現:   

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var AppleSchema = new mongoose.Schema({
appleName : {
  type : String,
  default : ' 江蘇紅果 ',
  trim : true
},
madeTime : {
  type : Date,
  default : Date.now //new Date()
},
address : {
  type : String,
  /*set : function(url){
    if(!url){
      return ;
     }
    if(-1 === url.indexOf('http://')&& -1 === url.indexOf('https://')){
      url = 'http://' + url;
    }
    return url;
  },*/
get : function(url){
  if(!url){
    return ;
  }
  if(-1 === url.indexOf('http://')&& -1 === url.indexOf('https://')){
    url = 'http://' + url;
  }
  return url;
 }
}
});
var Apple = mongoose.model('Apple',AppleSchema);
/*var Apple = mongoose.model('Apple',{
  appleName : {
    type : String,
    trim : true
   },
  address : {
    type : String,
    set : function(url){
    if(!url){
    return ;
  }
  if(-1 === url.indexOf('http://')&& -1 === url.indexOf('https://')){
    url = 'http://' + url;
  }
  return url;
}
}
});*/
var apple1 = new Apple({
  appleName : ' 江蘇紅果 ',
  address : 'baidu.com'
});mongoose

/*apple1.save(function(err){
  if(err){
    return '保存出錯了!';
  }
});*/post

Apple.find(function(err,docs){
  if(err){
    return '查找失敗了!';
  }
  console.log('數據庫裏面的數據爲:',docs);
 });ui

console.log('apple1爲:',apple1.address);this

//default是schema裏面特有的url

  

虛擬屬性

實現方式:

Schema.virtual()spa

代碼展現: 

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var AppleSchema = new mongoose.Schema({
  firstName : String,
  lastName : String
});
AppleSchema.virtual('fullName').get(function(){
  return this.firstName + '' + this.lastName;
});
AppleSchema.set('toJSON',{getters : true,virtual : true});
  var Apple = mongoose.model('Apple',AppleSchema);
  var apple1 = new Apple({
  firstName : 'app',
  lastName : 'le'
});
console.log('apple fullName:',apple1.fullName);
console.log('JSON:',JSON.stringify(apple1));code

    

索引

索引:

惟一索引、輔助索引   //輔助索引 增長查詢速度

代碼展現:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var AppleSchema = new mongoose.Schema({
code : {
  type : Number,
  unique : true //惟一索引
},
name : {
  type : String,
  index : true //輔助索引
}
});

模型的方法

方法的分類 

自定義靜態方法、自定義實例方法

代碼展現:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var AppleSchema = new mongoose.Schema({
  code : {
    type : Number,
  },
  name : {
    type : String,
  }
  /*code : Number,
  name : String*/
});
/*
靜態方法
*/
AppleSchema.statics.findByCode = function(code,cb){
  this.findOne({code:code},function(err,doc){
    cb(err,doc);
  });
};
/*
實例方法
*/
AppleSchema.methods.print = function(){
  console.log('appleName:',this.name);
};
var Apple = mongoose.model('Apple',AppleSchema);
var apple = new Apple({
  code : 1,
  name : '江蘇紅果'
});
/*apple.save(function(err){
  if(err){
    return err;
  }
  Apple.findByCode(1,function(err,doc){
    console.log("靜態方法打印的結果爲:",doc);
  })
});*/
/*Apple.find(function(err,doc){
  console.log("doc爲:",doc);
});*/
apple.print();

數據的校驗

預約義的驗證器:

required、Number(max,min)、String(enum,match)

自定義的驗證器:

validate

代碼展現:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var OrderSchema = new mongoose.Schema({
   count : {
      type : Number,
      //必須有值
      required : true,
      //最大值
      max : 1000,
      //最小值
      min : 10
   },
   intro : {
      type : String,
      //枚舉類型
      enum : ['優','良','通常','差','特別差']
   },
   phone : {
      type : String,
      //正則驗證
      match : /135/g,
      //自定義驗證器
      validate : function(phone){
         return phone.length>10;
      }
   },

});
mongoose.model('Order',OrderSchema);

var Order = mongoose.model('Order');
var order = new Order({
   count : 1000,
   intro : '優',
   phone : '12567891350'
});
//order.count = 1;
order.save(function(err){
   if(err){
      return console.log('保存出錯了!',err);
   }
   console.log('保存成功');
});

中間件

類型:

文檔中間件(init、validate、save、remove),查詢中間件(count、find、findOne、findOneAndRemove、findOneAndUpdate、update)

預處理中間件

後置處理中間件

代碼展現:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var ResultSchema = new mongoose.Schema({
   address : String
});
//預處理中間件
ResultSchema.pre('save',true,function(next,done){
   console.log('執行預處理中間件!');
   next();
   done();
});
//後置處理中間件
ResultSchema.post('save',function(next){
   console.log('執行後置處理中間件!',next);
   next();
})
mongoose.model('Result',ResultSchema);

var Result = mongoose.model('Result');
var result = new Result();
result.address = 'I am in GuangZhou';
result.save();

DBRef  

DBRef的定義://至關於數據庫裏面表與表之間的聯合查詢,關聯關係

populate()

代碼展現:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test5');
var UserSchema = new mongoose.Schema({
   name : String
});
var BookSchema = new mongoose.Schema({
   title : String,
   author : {
    type : mongoose.Schema.ObjectId,
    ref : 'User'
 }
});

mongoose.model('User',UserSchema);
mongoose.model('Book',BookSchema);

var User = mongoose.model('User');
var Book = mongoose.model('Book');

var user = new User({
   name : '張三'
});
var book = new Book({
   title : '鬼故事',
   author : user
});

user.save(function(err){   if(err) return console.log('做者保存失敗!err=',err);   /*book.save(function(err){    if(err) return console.log('圖書保存失敗!err=',err); }); Book.find().populate('author').exec(function(err,docs){    console.log('信息爲:',err,docs); });*/ BookSchema.post('save',function(next){    Book.find().populate('author').exec(function(err,docs){       if(err) return console.log(err);         console.log('保存成功後,查詢的結果爲:',docs);    }); }); book.save(function(err){    if(err) return console.log(err);    console.log('圖書信息保存成功!'); });});

相關文章
相關標籤/搜索