mongodb入门学习文档

前端之家收集整理的这篇文章主要介绍了mongodb入门学习文档前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

名词解释

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

准备工作

数据库连接
  • 定义Schema

属性name,类型为String
    })
  • 将Schema发布成Model

代码将会发生异常
  • 使用Model创建Entity

  • 在骨架Schema上创建方法

  • Entity具有操作数据的CRUD

查询到所有的person
    });

新手指引

  • 定义Schema

属性,后者为属性类型
  • Schema数据类型

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

Schema扩展

  • methods 直接通过PersonSchema调用?

调用
    })
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';//会被<a href="/tag/zidong/" target="_blank" class="keywords">自动</a>分解
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,遇到错误抛出

属性将无法被存储
//该<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>也能在构造实例的时使用
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版本锁

数据库的版本锁就不是__v属性,而是__someElse,相当于是给版本锁取名字。
    new Schema({...},{versionKey:false});//删除

6.autoIndex自动索引

文档操作

  • 更新

1.方式一:通过Entity更新

2.通过Model更新

删除
        PersonModel.updaete({_id:_id},person,function(err){})
    })

3.使用$set属性

修改的数量
    Person.findByIdAndUpdate({_id:_id},callback);//回调的第二个参数为修改的实体entity
    //findByIdAndRemove方法类似
  • 新增

如果使用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>

查询子文档

验证@H_301_233@

1.验证始终定义在SchemaTypes中
2.验证是一个内部中间件
3.验证实在一个Document被默认启用的,除非你关闭
4.验证是异步递归的,如果SubDoc验证失败,Document也将无法保存
5.验证并不关心错误的类型,而通过ValidationError对象访问

  • 验证器

1.required
2.max/min
3.enum/match(枚举验证/匹配验证)
4.validate自定义验证规则

required:true //姓名非空
      },age:{
        type:'Nunmer',min:18,//年龄最小18
        max:120     //年龄最大120
      },city:{
        type:'String',enum:['北京','上海']  //只能是北京、上海人
      },other:{
        type:'String',validate:[validator,err]  //validator是一个验证函数,err是验证失败的错误信息
      }
    });

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

错误集合(对象)
    err.errors.color          //错误属性(Schema的color属性)
    err.errors.color.message  //错误属性信息
    err.errors.path             //错误属性路径
    err.errors.type             //错误类型
    err.name                //错误名称
    err.message                 //错误消息

猜你在找的程序笔记相关文章