一、创建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)
该方法根据查找更新数据库返回查找到的并未改变的数据
- 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}
})
网友评论