mogoose小记

来源:转载

mogoose


schema---模式定义,堆数据库字段的类型进行定义【string,int,float】


var mongoose = require('mongoose'); // 顶会议用户组件
// 创建模型
var Schema = mongoose.Schema;
var userScheMa = new Schema({
userid: String,
password: String
});

Model---编译模型


通过模式构造而来


Document---文档实例化


Mongoose中的操作流程

1. 连接数据库


var mongoose = require("mongoose");
// 连接字符串格式为mongodb://主机/数据库名
mongoose.connect('mongodb://localhost/test');

2. 存储数据


var Schema = mongoose.Schema;
//骨架模版
var movieSchema = new Schema({
doctor : String,
title: String,
language : String,
country: String,
year : Number,
summary: String,
poster : String,
flash: String
})
//模型
var Movie = mongoose.model('Movie', movieSchema);
//存储数据
var moive = new Movie({
title: '黑衣人三',
doctor: '史密斯',
year: 2018,
flash: 'http://player.youku.com/player.php/sid/XNjA1Njc0NTUy/v.swf',
country: '美国',
language: '英语',
summary: '好片'
})
//保存数据库
moive.save(function(err) {
if (err) {
console.log('保存失败')
return;
}
console.log('meow');
});

以上是最简单的数据操作了


流程就是:通过Schema创建一个模式movieSchema ,通过模式movieSchema创建一个模型Movie,通过模型Movie写入数据,通过save方法保存


定义schema->创建model->实例化方法


表 –》 合集 –》 文档


这里涉及几个名词概念Schema与Model


3.Schema与Model

Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对

虽然模式(Schema)在MongoDB的存储中并不是必须的,但是一般来说为了文档的整齐一致我们在Mongoose中还是会用到模式。可以说,Mongoose中的一切都从定义模式开


不像传统的关系型数据库一样,比如mysql,连接好数据后直接有把sql语句丢到一个指定的方法中就执行了,这里会有Schema的抽象概念


Schema它类似于关系数据库的表结构,可以理解为数据库模型骨架


Schema可以看作工厂中模具一样,好比一个茶杯,喝水是茶杯最终的功能,茶杯本身就像是Model,那么茶杯的批量生产是需要靠工厂的模具成型的,这就像是Schema了


Schema不仅定义了文档结构和使用性能,还可以有扩展插件、实例方法、静态方法、复合索引、文档生命周期钩子


Schema生成Model


4. CURD操作


Model可以看到关系型数据库中的表,那么通过new Model出来的实例document文档对应的则是关系数据库中表的一行记录


document有许多内置的实例方法. 可以直接执行增删改查操作


增加数据


//模型var Movie = mongoose.model('Movie', movieSchema);
var moive = new Movie({
title: '黑衣人三',
doctor: '史密斯',
year: 2018,
flash: 'http://player.youku.com/player.php/sid/XNjA1Njc0NTUy/v.swf',
country: '美国',
language: '英语',
summary: '好片'
})
//保存数据库
moive.save(function(err) {
if (err) {
console.log('保存失败')
return;
}
console.log('meow');
});

在这里我们通过对模型Movie实例化生成了一个叫moive的文档,并使用save方法将它存储到了集合


修改数据


User.update({_id: oneUser._id}, {
$set: {name: oneUser.name,password:oneUser.password}
}, function(err) {
if(err){
console.log(err)
return
}
console.log('更新成功')
});

更新的数据比较少用$set,可用性还是很好


删除数据


User.remove({
_id: id
}, function(err) {
if (err) {
console.log(err)
return
}
console.log('删除成功')
});
3. Documents

Document是与MongoDB文档一一对应的模型,Document可等同于Entity,具有属性和操作性


注意:


Document的`CRUD都必须经过严格验证的,参看2.5.2 Schema的strict严格配置


3.1 查询

查询内容过多,专题讲解


3.2 更新

有许多方式来更新文件,以下是常用的传统方式:


PersonModel.findById(id,function(err,person){
person.name = 'MDragon';
person.save(function(err){});
});

这里,利用Model模型查询到了person对象,该对象属于Entity,可以有save操作,如果使用Model`操作,需注意:


PersonModel.findById(id,function(err,person){
person.name = 'MDragon';
var _id = person._id; //需要取出主键_id
delete person._id;//再将其删除
PersonModel.update({_id:_id},person,function(err){});
//此时才能用Model操作,否则报错
});

update第一个参数是查询条件,第二个参数是更新的对象,但不能更新主键,这就是为什么要删除主键的原因。


当然这样的更新很麻烦,可以使用$set属性来配置,这样也不用先查询,如果更新的数据比较少,可用性还是很好的:


PersonModel.update({_id:_id},{$set:{name:'MDragon'}},function(err){});

需要注意,Document的CRUD操作都是异步执行,callback第一个参数必须是err,而第二个参数各个方法不一样,update的callback第二个参数是更新的数量,如果要返回更新后的对象,则要使用如下方法


Person.findByIdAndUpdate(_id,{$set:{name:'MDragon'}},function(err,person){
console.log(person.name); //MDragon
});

类似的方法还有findByIdAndRemove,如同名字,只能根据id查询并作update/remove操作,操作的数据仅一条


3.3 新增

如果是Entity,使用save方法,如果是Model,使用create方法


//使用Entity来增加一条数据
var krouky = new PersonModel({name:'krouky'});
krouky.save(callback);
//使用Model来增加一条数据
var MDragon = {name:'MDragon'};
PersonModel.create(MDragon,callback);

两种新增方法区别在于,如果使用Model新增时,传入的对象只能是纯净的JSON对象,不能是由Model创建的实体,原因是:由Model创建的实体krouky虽然打印是只有{name:'krouky'},但是krouky属于Entity,包含有Schema属性和Model数据库行为模型。如果是使用Model创建的对象,传入时一定会将隐藏属性也存入数据库,虽然3.x追加了默认严格属性,但也不必要增加操作的报错


3.4 删除

和新增一样,删除也有2种方式,但Entity和Model都使用remove方法

分享给朋友:
您可能感兴趣的文章:
随机阅读: