美文网首页
Mongodb 的一些细节

Mongodb 的一些细节

作者: Luwnto | 来源:发表于2016-07-07 23:01 被阅读120次

关于mongodb查询出来的数据类型

id类型

mongodb 的id是一个特殊的对象:

主键,一种特殊而且非常重要的类型,每个Schema都会默认配置这个属性,属性名为_id,除非自己定义,方可覆盖主键,
一种特殊而且非常重要的类型,每个Schema都会默认配置这个属性,属性名为_id,除非自己定义,方可覆盖

var mongoose = require('mongoose');
var ObjectId = mongoose.Schema.Types.ObjectId;
var StudentSchema = new Schema({}); //默认会有_id:ObjectId
var TeacherSchema = new Schema({id:ObjectId});//只有id:ObjectId

如果想用id直接做关联查询,我们可以这样做:

var ExampleSchema = new Schema({
  _pk:{type:Schema.Types.ObjectId,ref:'tableName'}
});

这样就关联了一张表,在查询的时候,会自动把这个ID替换成相应表中对应id的数据

如果只是想把id做为字符串和其他表关联,这样做:

因为id是一个特殊的对象类型,所以我们在使用的时候要进行响应的转换:

var id =(obj._id).toString();  //把id转换成字符串

这是为了解决如果你的表中,pid定义的是字符串类型,在取得另一张表的id直接往这张表里面存的时候,
mongodb会自动将你插入的ID转换成表中定义好得String类型,这样以后你再拿取出来的对象类型的id去查
数据的时候是查询不到的,需要进行字符串转换

findOne类型

findOne查询到的是一条数据,是字符串类型的,比如:

{name:'aaa',age:'55'}  //查出来的数据是字符串类型,不能当做对象用

我们如果想直接调用其中的属性,要先把查到的字符串转换成json对象:

var json = data.toObject(); //这样我们就可以当做json对象使用了

find 类型

find查询到的数据是一个数组(因为查询多条呀),是这样的:

arr = [{name:'aaa',age:'55'},{name:'aaa',age:'55'},{name:'aaa',age:'55'}]

我们可以直接用for 循环取出其中的数据

for (var i=0;i<arr.length;i++) {
    console.log(arr[i]);
}

因为是一个数组,所以它里面只是存得json形式的字符串罢了,如果想用它的数据和属性,这样做:

for (var i=0;i<arr.length;i++) {
    var obj = arr[i].toObject();  //这样obj就是一个一个json对象了,我们就可以为所欲为了
    console.log(obj);
}

静态方法

我们在通过Schema实例化一个Model之前,可以对即将生成的Model封装自定义的静态方法:

//一个新的Schema对象
var Schema = new Schema(
  {
    name:String,
    age:Number
  }
);

//定义静态方法
Schema.static.myFunctionName = function(name, callback){
    this.find({name:name},callback); //一定要有回调函数,不然异步的查询,数据你就获取不到了
}

//使用静态方法
var myModel = mongoose.model('tableName',Schema);
myModel.myFunctionName('tom',function(err, data){  //找到所有名字为tom的人
    console.log(data);  //通过自己定义的方法拿到数据了
});

验证器

在定义表结构的时候,我们可以添加一些内置的函数来验证数据:

  • required 非空验证
  • min/max 范围验证
  • enmu/match 枚举验证/匹配验证
  • validate 自定义验证
        var PersonSchema = new Schema({
          name:{
            type:'String',
            required:true //姓名非空
          },
          age:{
            type:'Nunmer',
            min:18,       //年龄最小18
            max:120     //年龄最大120
          },
          city:{
            type:'String',
            enum:['北京','上海']  //只能是北京、上海人
          },
          other:{
            type:'String',
            validate:[validator,err]  //validator是一个验证函数,err是验证失败的错误信息
          }
        });

如果验证失败,返回err:

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

相关文章

  • Mongodb 的一些细节

    关于mongodb查询出来的数据类型 id类型 mongodb 的id是一个特殊的对象: 主键,一种特殊而且非常重...

  • mongodb 使用参考

    关于mongodb创建索引的一些经验总结(转) MongoDb 数据迁移 MongoDB 更新数据 MongoDB...

  • 10.跟我学SpringBoot-整合mongoDB

    在学习这一节前,你需要了解什么是MongoDB,怎么安装,细节参看:4.1MongoDb介绍及java使用 1.m...

  • 十分钟搞定mongodb副本集

    mongodb副本集配置 最近项目中用到了mongodb,由于是用mongodb来记录一些程序的日志信息和日...

  • nodejs使用mongoose对mongodb进行增删查改基础

    首先要介绍一下Mongodb的一些基本操作 以上是mongodb的一些基本操作,使用mongoose之后一些操作的...

  • ssh2框架整合 mongodb

    struts2+ spring +hibernate+ mongodb 业务升级需要用到mongodb存储一些信息...

  • MongoDB 入门

    本文主要记录近期学习 MongoDB 的一些内容,主要参考了官方文档 https://docs.mongodb.c...

  • BookSpider

    Python结合mongodb做的小爬虫,用来爬某网站的书!项目地址BookSpider,更多细节自己优化!

  • Node.js官方mongodb驱动

    准备 一些mongodb命令 连接mongodb 插入数据 更新数据 删除数据 查询数据 参考https://gi...

  • MongoDB 如何实现自动增长ID

    项目需要进行MongoDb转换,查了一些资料,整理好后以便查阅 ObjectId的选择 创建MongoDB文档时,...

网友评论

      本文标题:Mongodb 的一些细节

      本文链接:https://www.haomeiwen.com/subject/keiljttx.html