MongoDB是一个广泛使用的非关系型数据库管理系统。MongoDB(或任何其他数据库)的数据存储机制强烈依赖于该数据库管理系统所支持的数据类型。MongoDB以BSON的形式存储数据,这是一种二进制编码的JSON格式,因为它的名字也是由 "二进制"和**"JSON "演变而来。**BSON所支持的数据类型被认为对MongoDB有效。
MongoDB系列的这篇文章将提供关于MongoDB中使用的数据类型的详细信息。但在此之前,让我们对JSON格式和它的二进制扩展BSON进行一下比较。
JSON vs. BSON
JSON(JavaScript Object Notation)格式是人类可读的,主要用于数据的传输。JSON类型的数据由键值对(通常称为对象)和一个数组组成。在JSON中的传输取决于键值对。JSON文档占用的空间较少,但在JSON中执行通常比BSON花费更多时间。
BSON是JSON的一个二进制扩展,是机器可读的,用于存储数据。通过指定一个字段名(通常指定为字符串),然后给它赋值(可以是MongoDB支持的任何类型),可以使用BSON存储数据。BSON消耗更多的空间,因为它也存储额外的信息(如字符串的长度),但它的执行速度很快。此外,BSON支持的数据类型的数量比JSON多。
MongoDB支持的数据类型有哪些?
本节包含了MongoDB中几种数据类型对字段值的分配。还提供了一个存储每种数据类型的例子。
注意: 集合名称为 "Authors"**,**我们通过使用MongoDB中的find with pretty方法来打印每个文档。find()方法打印出结果,而pretty()方法则以一种美观的方式打印出该结果。
>db.Authors.find().pretty()
字符串。 字符串值可以通过在双引号(" ")内表示来存储到任何字段。下面的命令将在 "Authors"集合中插入一个包含字符串字段的文档。
>db.Authors.insertOne({Name:"Sam" })
或者你也可以通过先创建一个字符串变量,然后将该变量调用到MongoDB文档中进行插入。
创建一个变量。
>var fname="Sam"
插入到一个文档中。
>db.Authors.insertOne({Name: fname})
整数**:** 整数(不包括浮动值)值可以通过以下方式插入MongoDB中。
>db.Authors.insertOne({num:10})
数组。 一组值可以使用数组存储在MongoDB中;这种数据类型可以存储多个包含不同数据类型的字段。
>db.Authors.insertOne({staff:["John", "Mike", "Jobes" ]})
布尔型: 这些数据类型只接受布尔型数值(真或假),下面的命令存储了一个布尔型数值。
>db.Authors.insertOne({pass:true,fail:false})
双重。 double数据类型可以用来存储浮动值。一个在MongoDB文档中存储浮动值的例子写在下面。
>db.Authors.insertOne({number:12.25})
对象。 对象数据类型用于在MongoDB文档中存储一个嵌入式文档。对象数据类型以键值对的形式接受其他数据类型。为此,我们首先创建了一个对象变量,然后我们将把它调用到MongoDB集合中。
要创建一个对象变量。
>var info={name:"Mark",age:45,city:"NewYork" }
将其插入到另一个文档中。
>db.Authors.insertOne({distribution:"Ubuntu",Author: info})
注意: 在对象数据类型中,不需要创建变量,但建议这样做,因为有时复杂的文档可能需要额外的时间来直接串一个对象。
未定义。 这种数据类型有助于存储未定义的值。例如,你可以存储一个字段(记住),其值还没有定义,以后你可以替换它。下面的命令有助于在文档中存储一个未定义的值到字段。
>db.Authors.insertOne({period:undefined})
ObjectId: 每个数据库都用一个唯一的标识号来存储数据。在MongoDB中,通过使用下面提到的命令,ObjectId()可以用来给文档分配一个唯一的ID。
>db.Authors.insertOne({_id:ObjectId()})
注意: 如果你忘记给文档分配一个唯一的ID,那么MongoDB会自动分配它。
日期。 这种数据类型可以用来存储当前的日期和时间。此外,这种数据类型有以下扩展。
Date()。 这种类型的Date将以字符串格式返回答案。它可以通过以下方式声明。
>db.Authors.insertOne({date:Date()})
ISODate()。 这个类型返回一个日期对象,它使用ISO日期包装器来显示这个字段。
>db.Authors.insertOne({date: ISODate()})
时间戳。 这个数据类型可以用来在文档中放置一个时间戳,这非常有用,特别是当你定期更新数据库的时候。放置时间戳的例子如下。
>db.Authors.insertOne({ts: newTimestamp()})
Min和Max键: MinKey和MaxKey 比较BSON元素中的最小值和最大值。这些类型被称为内部数据类型。
>db.Authors.insert([{t:5},{t:null},{t:15},{t:25},{t:MinKey},{t:MaxKey}])
符号。 符号数据类型不被MongoDB shell识别,因此它被认为是一种字符串数据类型。符号的赋值和字符串数据类型的赋值是一样的。
>db.Authors.insertOne([{designation:"##@" }])
Null。 这种数据类型可以用来在文档的一个字段中分配一个空值。下面的例子将有助于为一个字段分配一个空值。
>db.Authors.insertOne({value:null})
正则表达式。正 则表达式可以在这种数据类型的帮助下被存储。例如,在这里,我们创建了一个变量来存储正则表达式"^linux"。
要将正则表达式存储在一个变量中。
>var re= newRegExp( "^linux" )
现在调用该变量将其存储在一个文档中。
>db.Authors.insertOne({regex: re})
注意: 正则表达式在从一个集合的几个字段中搜索一个字符串时是非常有用的。
总结
数据类型支持在处理任何数据库管理系统中的数据时都起着关键作用。MongoDB支持属于BSON类型保护伞下的所有类型。在MongoDB系列的这篇文章中,我们汇编了MongoDB中有效数据类型的列表。此外,每个数据类型都有描述,为了更好地理解,也引用了一个例子。如果你已经使用了MongoDB或者计划在未来使用它,这篇文章将有利于你对MongoDB中的数据类型有一个鸟瞰的认识。