名词解释
Schema:模型骨架,以文档的形式存储,不具备数据库的操作能力 Model:是Schema生成的模型,能够操作数据库 Entity:Model创建的实体,操作会影响数据库 三者之间的关系:Schema生成Model,Model创造Entity,Model和Entity都能够对数据库造成影响,但是Model比Entity更加具有操作性
准备工作
新手指引
Schema扩展
PersonSchema.virtual('name.full').set(function(name){
var split = name.split(' ');
this.name.first = split[0];
this.name.last = split[1];
});
var PersonModel = mongoose.model('Person',PersonSchema);
var krouky = new PersonModel({});
krouky.name.full = 'krouky han';//会被自动分解
console.log(krouky.name.first);//krouky</code></pre>
配置项 new mongoose.Schema(config,options); 第二个参数就是配置项或者使用 var mySchema = new mongoose.Schema(config); mySchema.set(option,value) ,配置项包括safe,strict,capped,versionKey,autoIndex
1.safe安全属性,两种方式
2.strict严格配置(默认启用),确保Entity的值在进入数据库之前会被自动验证,strict可以设置为throw,遇到错误抛出
//该属性也能在构造实例的时使用
var ThingModel = db.model('Thing');
var thing1 = new ThingModel(doc,true); //启用严格
var thing2 = new ThingModel(doc,false); //禁用严格</code></pre>
3.shardKey 做分布式使用 4.capped 上限设置
5.versionKey版本锁
6.autoIndex自动索引
文档操作
1.方式一:通过Entity更新
2.通过Model更新
3.使用$set属性
如果使用Entity,使用save方法,如果使用Model,使用create方法
区别:如果使用Model新增,传入对象必须是纯净的JSON对象,不能是Model创建的实体.使用Model创建的实体pen,虽然打印出来是只有{name:'pen'},但是pen属于Entity,包含了Schema属性和Model数据库行为模型。如果将Model创建的对象传入时,一定会将隐藏的属性也传入数据库。
//使用
var ParentModel = db.model('Parent',parentSchema);
var parent = new ParentModel({
children2:[{name:'c1'},{name:'c2'}]
})
parent.children2[0].name = 'd';
parent.save(callback);
//parent在执行保存时,先保存children2[0].name,children2[1].name,然后再保存</code></pre>
查询子文档
验证
1.验证始终定义在SchemaTypes中 2.验证是一个内部中间件 3.验证实在一个Document被默认启用的,除非你关闭 4.验证是异步递归的,如果SubDoc验证失败,Document也将无法保存 5.验证并不关心错误的类型,而通过ValidationError对象访问
1.required 2.max/min 3.enum/match(枚举验证/匹配验证) 4.validate自定义验证规则
验证失败之后,返回的错误信息
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|