mongoose

作者: 冷小谦 | 来源:发表于2019-01-10 15:48 被阅读13次

一、创建schemas

var userSchema = new mongoose.Schema({
  name:String,
  email:String,
  createdOn:Date
})

schemas的数据类型
String Number Date Boolean Buffer ObjectId Mixed Array

ObjectId类似于唯一键值
projectSchema.add({
  owner:mongoose.Schema.Types.ObjectId
})
混合类型,顾名思义就是里面可以放置任意类型的数据,两种方式创建:
1.mixedUp:{}
2.mixedUp:Schema.Types.Mixed

schema静态方法,用在model中,创建该静态方法需要在创建完成schema之后,Model编译之前

projectSchema.statics.findByUserID=function(userid,callback){
  this.find({createdBy:userid},'id_projectName',{sort:'modifiedOn'},callback)
}

二、创建Model

Mongoose.Model('User',userSchema),参数一Model名,参数二生成Model所需要的schema。所以Model是根据schema生成的
mongoose连接数据库两种方式:

1.
var dbURI = 'mongodb://localhost/mydatabase'
mongoose.connect(dbURI);
2.
 var adminConnection = mongoose.createConnection(dbURI)
3.声明端口号
var dbURI = 'mongodb://loaclhost:27018/mydatabase'
4.定义用户名和密码
var dbURI = 'mongodb://username:password@localhost/mydatabase'
5.传对象类型参数
var dbURI = 'mongodb://localhost/mydatabase'
var dbOptions = {'user':'db_username','pass':'db_password'};
mongoose.connect(dbURI,dbOptions)

第二种创建model的方式
adminConnection.model('user',userSchema)
在创建model的同时定义collection的名字
mongoose.model( 'User', userSchema, 'myuserlist' );

创建Model实例

创建的实例具有mongoose中模型所具有的方法,保存,模型也具有增删改查方法

var user = new User({name:'Simon'})
user.save(function(err){
  if(err) return handlerError(err);
})

User.findOne({'name':'Sally'},function(err,user){
  if(!err){console.log(err)}
})

User.find({},function(err,users){
  if(!err){console.log(users)}
})

还可以链式调用

var newUser = new User({
  name:'wzq',
  email:'ziqian9206@126.com',
  lastLogin:Date.now()
}).save((err)=>{
  if(!err){console.log('user saved')}
})

也可以用Model.create()方法来创建模型实例

User.create({
      name: 'Simon Holmes',
      email: 'simon@theholmesoffice.com',
      lastLogin : Date.now()
 }, function( err, user ){
      if(!err){
          console.log('User saved!');
          console.log('Saved user name: ' + user.name);
          console.log('_id of saved user: ' + user._id);
     }
 });

三.查询数据和读取数据的方法

1.QueryBuilder查找数据

查找名字为wzq,年龄大于18,查找结果根据lastLogin降序排列,只获取其中的id name email三个字段,然后使用exec方法执行数据库查询。

var myQuery = User.find({'name':'wzq'});
myQuery.where('age').gt(18);
myQuery.sort('-lastLogin');
myQuery.select('id name email')
myQuery.exec((err,users)=>{
  if(!err){console.log(users)}
})

另外一种方式能够直接查找数据库的,就是直接在查找方法中添加回调函数
Model.find(conditions,[fields],[opt],[callback])

User.find({'name':'wzq'},function(err,user){})

User.find({'name','wzq'},'name email',function(err,user){
  //拿到name和email字段
})
//包含查询结果的排序
User.find(
  {'name':'wzq'},
  null,
  {sort:{lastLogin:-1}},//降序排序
  function(err,users){
  if(!err){
    console.log(users)
  }
 }  
)

常用的查找方法
Model.find(query)
Model.findOne(query)//返回查找到的所有实例的第一个
Model.findById(ObjectID)//根据ObjectId查找到唯一实例

2.更新数据

三种方式更新数据
condition查询条件
update更新数据对象,一个包含键值对的对象
options 声明操作类型的选项
callback 回调函数
1.update(condition,update,option,callback)
匹配到所查找的内容进行更新,不会返回数据
2.findOneAndUpdate(conditions,update,options,callback)
该方法根据查找更新数据库返回查找到的并未改变的数据

  1. findByIdAndUpdate(conditions,update,options,callback);
    根据id来查找文档并更新
3.数据删除

remove()
findOneAndRemove()
findByIdAndRemove()
remove可以用在模型上,也可以用在模型实例上

User.remove({name:'wzq'},function(err){
  if(!err){}
})
User.findOne({email:'wzq@xxx.com'},function(err,user){
  if(!err){user.remove(function(err){
  
})}
})

findOneAndRemove方法

User.findOneAndRemove({name:'wzq',{sort:'lastLogin',select:'name email'},function(err,user){
  if(!err){
  console.log(user.name+'remove')
}
}})

findByIdAndRemove方法

User.findByIdAndRemove(req.body._id,function (err, user) {
    if(err){
        console.log(err);
        return;
    }
    console.log("User deleted:", user);
});

四、数据验证

1.mongoose内置数据验证

mongoose中数据验证层放在schema中。
能够作用在所有数据类型上的验证有require,字段是否必须
email:{type:String,unique:ture,require:ture}
数字类型,min、max提供用来界定最大最小值

var teenSchema= new Schema({
  age:{type:Number,min:13,max:19}
})

字符串类型,match(使用正则表达式来匹配字符串是否符合正则表达式的规则)和enum(枚举字符串可用的值)两种验证器

var weekdaySchema = new Schema({
  day:{
    type:String,
    match:/^(mon|tues|wednes)day$/i
  }
})
var weekdays = ['monday', 'tuesday', 'wednesday', 'thursday','friday'];
var weekdaySchema = new Schema({
  day:{type:String,enum:weekdays}
})

相关文章

网友评论

      本文标题:mongoose

      本文链接:https://www.haomeiwen.com/subject/qtvorqtx.html