JSON是一种被广泛使用的轻量级的数据交换格式,支持现今绝大多数主流的开发语言。而近几年崛起的mongDB则采用了类JSON的数据格式,在JSON之上进行了丰富和增强,使得mongoDB可以处理及报错更大的数据类型。本文就2者进行描述同时给出mongoDB支持的数据类型。

一、JSON特性

1、什么是JSON

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

JSON采用完全独立于语言的文本格式,但也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。

这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

可以详细参考:http://www.json.org.cn/

2、JSON 数据的书写格式

名称/值对 对象

是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。

每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

如: ({"firstName":"John"}),更多的格式见本文第而部分BSON支持的数据类型

等价于这条 JavaScript 语句: firstName="John"

3、JSON仅支持以下数据类型

数字(整数或浮点数)

字符串(在双引号中)

逻辑值(true 或 false)

数组(在方括号中)

对象(在花括号中)

null

4、JSON基于两种结构:

“名称/值”对的集合(A collection of name/value pairs),在不同的编程语言中有不同的描述

如:对象(object),纪录(record),结构(struct),字典(dictionary)

哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)

值的有序列表。在大部分语言中,它被实现为数组(array),矢量(vector),列表(list),序列(sequence)

二、BSON特性

1、什么是BSON

BSON()是一种类json的一种二进制形式的存储格式,简称Binary JSON

它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。

https://docs.mongodb.com/manual/reference/bson-types/

2、BSON的特性

轻量性、可遍历性、高效性

3、mongoDB与BSON

mongoDB对JSON串做了一些增加,使其可以支持更多的数据类型,并且将其作为存储结构

mongoDB这种格式转化成一文档这个概念(Document),因为BSON是schema-free的,所以在MongoDB中所对应的文档也有这个特征

mongoDB以BSON做为其存储结构的一种重要原因是其可遍历性

4、演示mongoDB支持的数据类型

//null值

db.mycol.insert({x:null})

WriteResult({ “nInserted” : 1 })

//布尔型,用于存储布尔值(真/假)

db.mycol.insert({x:true})

WriteResult({ “nInserted” : 1 })

//小数

db.mycol.insert({x:3.1515})

WriteResult({ “nInserted” : 1 })

//整数,用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位

db.mycol.insert({x:3})

WriteResult({ “nInserted” : 1 })

//4字节带符合整数

db.mycol.insert({x:NumberInt(“3”)})

WriteResult({ “nInserted” : 1 })

//8字节带符号整数

db.mycol.insert({x:NumberLong(“3”)})

WriteResult({ “nInserted” : 1 })

//字符型,存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的

db.mycol.insert({x:”robin”})

WriteResult({ “nInserted” : 1 })

//日期型

db.mycol.insert({x:new Date()})

WriteResult({ “nInserted” : 1 })

//正则表达式

db.mycol.insert({x:/u01/i})

WriteResult({ “nInserted” : 1 })

//数组,用于将数组或列表或多个值存储为一个键

db.mycol.insert({x:[“a”,”b”,”c”]})

WriteResult({ “nInserted” : 1 })

//嵌套文档,用于内嵌文档

db.mycol.insert({x:{y:”nested”}})

WriteResult({ “nInserted” : 1 })

//对象id

db.mycol.insert({x:ObjectId()})

WriteResult({ “nInserted” : 1 })

//代码段

db.mycol.insert({x:function(){/This is a test code/}})

WriteResult({ “nInserted” : 1 })

//查找集合mycol的文档

db.mycol.find({},{_id:0})

{ “x” : null }

{ “x” : true }

{ “x” : 3.1515 }

{ “x” : 3 } //Author : Leshami

{ “x” : 3 } //Blog : http://blog.csdn.net/leshami

{ “x” : NumberLong(3) }

{ “x” : “robin” }

{ “x” : ISODate(“2016-09-06T02:46:35.173Z”) }

{ “x” : /u01/i }

{ “x” : [ “a”, “b”, “c” ] }

{ “x” : { “y” : “nested” } }

{ “x” : ObjectId(“57ce2f34ce8685a6fd9df3ae”) }

{ “x” : function (){/This is a test code/} }

//undefined类型

db.mycol.insert({name:undefined});

WriteResult({ “nInserted” : 1 })

db.mycol.insert({name:”123”});

WriteResult({ “nInserted” : 1 })

printjson(db.mycol.find().toArray())

[

{

“_id” : ObjectId(“57ce1cc8c60f1fe489e49c68”),

“name” : undefined

},

{

“_id” : ObjectId(“57ce1cdbc60f1fe489e49c69”),

“name” : “123”

}

]

//查找undefined类型的文档

db.mycol.find({name:”undefined”})

db.mycol.find({name:undefined})

Error: error: {

“waitedMS” : NumberLong(0),

“ok” : 0,

“errmsg” : “cannot compare to undefined”,

“code” : 2

}

db.mycol.find({name:{$type:6}})

{ “_id” : ObjectId(“57ce1cc8c60f1fe489e49c68”), “name” : undefined }

db.mycol.find({name:{$type:”undefined”}})

{ “_id” : ObjectId(“57ce1cc8c60f1fe489e49c68”), “name” : undefined }

//mongoDB数据类型的比较与排序优先级

1) MinKey (internal type)

2) Null

3) Numbers (ints, longs, doubles)

4) Symbol, String

5) Object

6) Array

7) BinData

8) ObjectId

9) Boolean

10) Date

11) Timestamp

12) Regular Expression

13) MaxKey (internal type)

5、关于_id与Object_Id

mongoDB中每一个文档都必须有一个"_id"键,该键等同于RDBMS中的主键,只不过这个主键是由mongoDB自动生成

"_id"键的值可以使用任意类型,可以不使用系统创建,而由用户自定义的规则生成

"_id"为轻量级,全局唯一,可类比为MySQL数据中的GTID,也用于解决不同机器副本集复制时唯一性问题

a 4-byte value representing the seconds since the Unix epoch, //时间戳

a 3-byte machine identifier, //机器唯一标识码

a 2-byte process id, and //进程ID

a 3-byte counter, starting with a random value. //随机数

db.mycol.findOne() { “_id” : ObjectId(“57ce2d4cce8685a6fd9df3a3”), “x” : null } 57ce2d4c //时间戳 ==>1473129804 ==> 2016/9/6 10:43:24 ce8685 //机器唯一标识码 a6fd //进程ID 9df3a3 //随机数

mongodb 字符串转bson_BSON及mongoDB数据类型相关推荐

  1. mongodb 数字 _id_MongoDB学习笔记MongoDB简介及数据类型

    欢迎点击上方蓝字关注我 本文所使用的MongoDB版本为 4.0.10 > db.version();4.0.10 一.MongoDB 介绍 1. MongoDB 的特点 MongoDB 是一个 ...

  2. c# mongodb or查询_C# 查询MongoDB中的数据

    1 usingMongoDB.Bson;2 usingMongoDB.Driver;3 usingSystem.Collections.Generic;4 5 namespaceMongoDB6 {7 ...

  3. mongodb 搜索速度_初识 MongoDB 数据库

    初识 MongoDB 数据库 前言 Flask 基础框架在之前的三篇文章中写完了.想要学习 web 相关的同学可以自己回顾翻一下,相信看完了,你也可以写出来一个简单的小案例来炫耀一波! 说到 web ...

  4. mongodb 数组添加_NoSQL之MongoDB——简介

    MongoDB是一种开源文档型数据库,它具有高性能,高可用性,自动扩展性 1.文档数据库 MongoDB用一个文档来表示一条记录,文档的数据结构由键值对组成.MongoDB文档类似于JSON对象,字段 ...

  5. MongoDB入门(1)- MongoDB简介

    什么是MongoDB NoSQL NoSQL systems are also sometimes called "Not only SQL" to emphasize that ...

  6. mongodb near java_简阅MongoDB JVM开发库

    当存储基于文档的 JSON 数据的时候,MongoDB 是我最喜欢的数据库.基于 JVM 的语言在与 MongoDB 交互上有很多种选择.我觉得拿四个最流行的解决方案并且都实现一个用例,对我来说不失为 ...

  7. MonGoDB基础学习(一)之MonGoDB的介绍和安装

    MonGoDB Windows下载安装 https://www.mongodb.com/try/download/community?tck=docs_server 直接下载就行 下载好后进行安装,目 ...

  8. 【mongodb双响曲】:mongodb的基本使用

    asdsps:文章是基于哔哩哔哩黑马讲解总结而成,链接就不放了,估计看到这的多少也都知道查找路径. MongoDB相关概念 为什么要使用MongoDB? "三高"需求: 具体的应用 ...

  9. MongoDB的学习,初识MongoDB

    MongoDB MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非 ...

最新文章

  1. 腾讯 AI Lab副主任俞栋:过去两年基于深度学习的声学模型进展
  2. 限制mysql服务为本地访问
  3. CentOS6.5系统重启后宕机
  4. cairosvg在linux中的安装_直接用ISO文件在linux上安装新系统
  5. 使用jQuery加载js脚本
  6. 如何安装最新的 XFCE 桌面?
  7. 解决python调试模型时,多次重复加载数据集与模型,节约大量等待时间
  8. mysql ssd优化测试_MySQL服务器SSD性能问题分析与测试
  9. js读取json文件(原生和jQuery)
  10. oracle roseha 配置,RoseHA 9.0 for Windows配合Oracle11g配置文档_v2.0-2015-04.pdf
  11. mac键盘锁住了怎么解决 苹果电脑键盘锁住了解决方法
  12. Linux系统防火墙概述
  13. 2016 0CTF rsa
  14. 程序员为什么不写注释
  15. mysql init 崩溃_MySQL · 引擎特性 · InnoDB崩溃恢复
  16. win10便签常驻桌面_Win 10最好用的10个功能,第一个你就不知道!
  17. NLP中面向文本表示的模型梳理
  18. QT QList<T>介绍与应用、详解、使用说明、官方手册翻译
  19. 数字图像处理第三章-----灰度变换
  20. 使用级联Softmax和广义大幅度损失训练的改进DCNN进行细粒度图像分类

热门文章

  1. 拼接(  read----contigs)和组装(contigs---Scaffolds)
  2. layui当前表格第一行_Excel表格如何写入组态王数据,看完就会了
  3. 织梦 ajax 返回,Dede织梦arclist标签+Ajax实现织梦首页分页-叙述织梦
  4. php 去掉img,php如何删除img标签
  5. javascript worker 多线程 简单示例
  6. ubuntu18.04.4 环境变量设置 export path
  7. MySQL 约束类型
  8. python 继承和多态
  9. Linux下 curl 代理设置注意事项--curl proxy
  10. springboot自定义jar通过enable配置是否开启