加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > C语言 > 正文

mongodb入门学习文档

发布时间:2020-12-15 01:19:52 所属栏目:C语言 来源:网络整理
导读:名词解释 Schema:模型骨架,以文档的形式存储,不具备数据库的操作能力 Model:是Schema生成的模型,能够操作数据库 Entity:Model创建的实体,操作会影响数据库 三者之间的关系:Schema生成Model,Model创造Entity,Model和Entity都能够对数据库造成影响,但是

名词解释

Schema:模型骨架,以文档的形式存储,不具备数据库的操作能力
Model:是Schema生成的模型,能够操作数据库
Entity:Model创建的实体,操作会影响数据库
三者之间的关系:Schema生成Model,Model创造Entity,Model和Entity都能够对数据库造成影响,但是Model比Entity更加具有操作性

准备工作

  • 连接数据库

  • 定义Schema

  • 将Schema发布成Model

  • 使用Model创建Entity

  • 在骨架Schema上创建方法

  • Entity具有操作数据的CRUD

  • 使用Model查询数据

新手指引

  • 定义Schema

  • Schema数据类型

  • 关于ObjectId 主键,每个Schema都会有一个主键,默认为_id:ObjectId,可以使用new mongoose.Schema({id:Types.ObjectId});

Schema扩展

  • methods 直接通过PersonSchema调用?

  • 静态方法 使用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创建的对象传入时,一定会将隐藏的属性也传入数据库。

  • 删除
    对比新增,分别有Entity和Model的remove方式

  • 子文档(SubDocs)

//使用
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自定义验证规则

验证失败之后,返回的错误信息

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读