JSON

JSON是一种简单的数据表示方式,它易于理解、易于解析、易于记忆。但从另一方面来说,因为只有null、布尔、数字、字符串、数组和对象这几种数据类型,所以JSON有一定局限性。例如,JSON没有日期类型,JSON只有一种数字类型,无法区分浮点数和整数,更别说区分32为和64位数字了。再者,JSON无法表示其他一些通用类型,如正则表达式或函数。

BSON

BSON(Binary Serialized Document Format)是一种类JSON的二进制形式的存储格式,简称Binary JSON。它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。它支持下面数据类型。每个数据类型对应一个数字,在MongoDB中可以使用$type操作符查看相应的文档的BSON类型

类型 对应数字 别名 说明
Double1 1 double  
String 2 string  
Object 3 object  
Array 4 array  
Binary data 5 binData  
Undefined 6 undefined 弃用
ObjectId 7 objectId  
Boolean 8 “bool”  
Date 9 “date”  
Null 10 “null”  
Regular Expression 11 “regex”  
DBPointer 12 “dbPointer”  
JavaScript 13 “javascript”  
Symbol 14 “symbol”  
JavaScript(with scope) 15 “javascriptWithScope”  
32-bit integer 16 “int”  
Timestamp 17 “timestamp”  
64-bit integer 18 “long”  
Min key -1 “minKey”  
Max key 127 “maxKey”  

基本数据类型

null:用于表示空值或者不存在的字段,{“x”:null}

布尔型:布尔类型有两个值true和false,{“x”:true}

数值:shell默认使用64为浮点型数值。{“x”:3.14}或{“x”:3}。对于整型值,可以使用NumberInt(4字节符号整数)或NumberLong(8字节符号整数),{“x”:NumberInt(“3”)}{“x”:NumberLong(“3”)}

字符串:UTF-8字符串都可以表示为字符串类型的数据,{“x”:“呵呵”}

日期:日期被存储为自新纪元依赖经过的毫秒数,不存储时区,{“x”:new Date()}

正则表达式:查询时,使用正则表达式作为限定条件,语法与JavaScript的正则表达式相同,{“x”:/[abc]/}

数组:数据列表或数据集可以表示为数组,{“x”: [“a“,“b”,”c”]}

内嵌文档:文档可以嵌套其他文档,被嵌套的文档作为值来处理,{“x”:{“y”:3 }}

对象Id:对象id是一个12字节的字符串,是文档的唯一标识,{“x”: objectId() }

二进制数据:二进制数据是一个任意字节的字符串。它不能直接在shell中使用。如果要将非utf-字符保存到数据库中,二进制数据是唯一的方式。

代码:查询和文档中可以包括任何JavaScript代码,{“x”:function(){/*…*/}}

BSON 与 MongoDB 的关系

BSON是用于存储MongoDB【文档】的一种文档格式。驱动程序在使用【文档】进行插入、查询或其他操作时。会先将【文档】编码成BSON格式,然后发送给服务器。同样地,服务器将文档返回客户端时,也是已BSON格式进行的。驱动程序先对此BSON进行解码然后再传送给客户端。因此,BSON与MongoDB的关系为:MongoDB利用BSON格式存储数据和传输数据

最新文章

  1. 旺信UWP正式版发布
  2. Oracle 把秒转成时分秒格式(hh24:mm:ss);检测字符串是否是数字;字符串转换为数字
  3. toad的基本操作
  4. eclipse maven 插件 安装 和 配置
  5. python里面出现中文的时候报错 'ascii' codec can't encode characters in position
  6. iOS 注意事项
  7. 北邀 E Elegant String
  8. 【Unity技巧】Unity中的优化技术
  9. JQuery AJAX的嵌套使用
  10. 生成HFile文件后倒入数据出现Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.filter.Filter
  11. PHP中实现在数据库中的增、删、查、改
  12. springboot入门_helloworld
  13. VRRP技术总结和配置实践
  14. Nmap扫描常用参数
  15. [转]简单的动态修改RDLC报表页边距和列宽的方法
  16. 冲刺博客NO.4
  17. [日常] Go语言圣经--示例: 并发的Echo服务
  18. iOS键盘类型最全
  19. Linux 增量系统备份和部分还原策略
  20. Android——使用Toolbar + DrawerLayout快速实现高大上菜单侧滑(转)

热门文章

  1. Java_jvisualvm使用JMX连接远程机器(实践)
  2. (47) odoo详细操作手册
  3. Redis优化之CPU充分利用
  4. mybatis.net insert 返回主键
  5. ASP注入靶机
  6. .net 日期格式转换
  7. codevs1955光纤通信(并查集)
  8. JNI加载Native Library 以及 跨线程和Qt通信
  9. 8.2.5: Spring3.0新增的@DependsOn和@Lazy
  10. 回车键搜索 - Enter搜索
  11. python第四课——线程、进程、协程
  12. @RequestBody对象为空,异常Required request body is missing
  13. SpringCloud的EurekaClient : 客户端应用访问注册的微服务(有断路器场景)
  14. pig脚本的参数传入,多个参数传入
  15. STL - set和multiset
  16. 《C#并发编程经典实例》学习笔记—2.5 等待任意一个任务完成 Task.WhenAny
  17. 爬虫-通过本地IP地址从中国天气网爬取当前城市天气情况
  18. Address already in use: JVM_Bind:80 异常的解决办法
  19. 【转】Python 之 元类
  20. jsp Servlet 文件上传