MongoDB学习整理(三)--数据类型介绍

本文是学习MongDb:The Definitive Guide(Mongodb权威指南)一书做的浅显的整理,请大神们多多指教。

Json是一种简单的数据表示方式,仅有6种数据类型。null、数据、字符串、数组、对象、布尔。由于数据表示的数据类型少,所以Json的表现能力也有限。
MongoDb使用的数据类型是BSON,BSON在保留JSON数据键值对特性的基础上又增加了一些数据类型,如日期,正则等。下面介绍MongoDB的数据类型:

  • null
    null用于表示空值或不存在的键值,{x:null}

  • 布尔

  • 数字
    JavaScript只支持一种数据类型,64位浮点数。因为MongoDb中有32位整数,64位整数,64位浮点数三种数字。所以shell必须绕过JavaScript限制。默认情况下,shell中的数字都会被MongoDb当作双精度数。所以尽量不要在shell下覆盖整个文档。
    有些64位整数并不能被表示成64位浮点数,所以当在shell中查看时,字会以内嵌文档的形式显示。如文档键integer的值为64位整数3,那么显示结果为:

    {_id:ObjectId(""),"myInteger":{"floatApprox":3}}
    floatApprox是一种特殊的内嵌文档,可以作为值和文档来操作
    >doc.myInteger+1
    4
    >doc.myInteger.floagApprox
    3
    上述表示可能不准确,要是内嵌文档只有一个键,那么实际上这个值是准确的。
    如果插入的64位整数不能准确的表示为双精度数,那么shell会添加两个键”top”和”bottom”,分别表示高32位和低32位,如:插入9223372036854775807,显示如下:
    {
    _id:ObjectId(""),
    myInteger:{
    "floatApprox":9223372036854775807
    "top":2147483647,
    "bottom":4294967295
    }
    }
    32位整数都可以精确的表示为64位浮点数

  • 字符串
    Utf8字符串都可以表示成字符串类型的数据,{“x”: “char”}

  • 符号
    shell不支持符号类型,符号类型数据会被转为字符串存储。

  • 对象id
    对象id是文档的12字节唯一id,{“_id”: ObjectId()}
    Mongodb中的文档必须有一个_id键,这个键的值可以是任意类型的,默认是ObjectId类型的。不同的机器都可以用全局唯一的同种方法生成ObjectId类型。
    MongoDb设计的初衷就是分布式的,所以处理多个节点是一个核心要求。ObjectId类型会在分布式环境中容易生成。
    ObjectId占12字节空间,每个字节由两位十六进制数字组成,是一个24位长的字符串。
    ObjectId是由时间戳,机器码,进程号,计数器生成。

    前4个字节是由标准纪元开始的时间戳,精确到秒级
    接下来3个字节是所在机器的唯一标识符,通常是机器散列值
    后2个字节是产生ObjectId的进程标识符
    最后3个字节是计数据器
    前9个字节保证了同一秒不同机器不同进程产生的ObjectId唯一,后3字节确保相同进程同一秒产生的ObjectId也是不同的,同一秒钟最多允许每个进程产生256的3次方(16777216)个ObjectId

    ObjectId是由MongoDb自动生成。MongoDb把生成ObjectId的任务交给客户端,这样减轻数据库扩展的负担。同时客户端生成ObjectId,驱动程序可以提供更多的Api。如果驱动程序允许服务器端生成ObjectId,那么将需要单独的查询,以确认插入的ObjectId值是否存在。

  • 日期
    日期是从标准纪元开始的毫秒数,不存时区,{“x”: new Date())}。
    JavaScript中Date对象用作MongoDb的日期类型,通常调用Date(…)会返回日期的字符串类型,调用new Date(…)才会返回真正的日期对象,这是JavaScript本身的特性,不是MongoDb的特性。MongoDb创建新的日期时会调用new Date(),而不是Date()。
  • 正则表达式
    文档中存储的正则表达式采用JavaScript正则表达式语法,{“x”: /baz/i}
  • 代码
    文档中可以包含JavaScript代码,{“x”: function(){/* */}}
  • 二进制数据
    二进制数据可以由任意字节的串组成,不可shell中不可以使用。
  • 最大值
    BSON包括一个特殊的类型,表示可能的最大值,shell中不能使用。
  • 最小值
    BSON包括一个特殊的类型,表示可能的最小值,shell中不能使用。
  • 未定义
    文档中可以使用未定义类型(null,undefined).null表示没有这个对象或定义,undefined表示有该对象或定义但不应该有值。
  • 数组
    值的集合或列表可以表示成数组,{“x”: [“a”,”b”,”c”]}
    数据可以包含不同数据类型的元素,MongoDb能理解数组结构,并知道如何深入数组内部操作其内容,这样就能用内容对数组进行查询及构建索引了
  • 内嵌文档
    文档可以包含别的文档,也可以做为值嵌入到父文档中,{“x”:{“a”:”b”}}
    同数组一样,Mongodb也能理解内嵌文档的结构,并深入其中构建索引,执行查询,或者更新。
    内嵌文档可能会带来数据的冗余,最好将同类的文档放到另一个集合中操作。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值