0
点赞
收藏
分享

微信扫一扫

Mongodb 被忽略的 数据类型 索引种类 与限制 与如何导向开发者 (1 常用数据类型)

Mongodb  被忽略的 数据类型 索引种类 与限制  与如何导向开发者 (1 常用数据类型)_mongodb

MONGODB 数据存储的方式是通过压缩后的BSON的方式进行数据存储的这样的方式有利于数据的压缩,但在工作的过程中,MONGODB 的数据类型其实倒是被使用者忽略的。此时如果问一下Mongodb 到底有多少,数据类型data types 可能一时还真说不清。


下面我们看看具体的数据类型到底有哪些,MONGODB 主要的数据类型有16种,其中部分与传统数据库的类型近似,有些是MONGODB 独有的类型。


与传统数据库接近的类型如,

Double  , String ,  Binary data, Integer, timestamp

传统数据库中没有的类型

Object ,Array, Undefined , ObjectID , Null, Regular Expression , javaScript, symbol , JavaScript with scope , Minkey , Maxkey


这些数据类型到底可以做什么,怎么去用,其实是使用者应该关心的,或者管理MONODB 的管理者应该向使用者所介绍的。


1  Double ,这与传统数据库类似,存储浮点型的数据值,通过在MONGODB中给变量赋值的方式来展示, 对于 DOUBLE 的数字存储有一个扩展的类型 NumberDecimal 这个存储的方式对于数字更精确,如果对数值以及数值计算有特殊的要求,可以选择 NumberDecimal 的方式


Mongodb  被忽略的 数据类型 索引种类 与限制  与如何导向开发者 (1 常用数据类型)_数据_02


Mongodb  被忽略的 数据类型 索引种类 与限制  与如何导向开发者 (1 常用数据类型)_数据类型_03

2  String  大部分的数据在MONGODB 中存储都是通过STRING 类型进行的数据存储,STRING的数据是通过UTF-8 存入MONGODB 的数据文件中。

Mongodb  被忽略的 数据类型 索引种类 与限制  与如何导向开发者 (1 常用数据类型)_数据类型_04


3  Object Object 类型,将输入的内容看做一个OBJECT 对象对待,

> var local={name:"Austin",credit:100}

> db.data.insert({employeeid:1,employee:local})

WriteResult({ "nInserted" : 1 })

> db.data.find()

{ "_id" : ObjectId("61ecb3d79e39097058d2c3cb"), "employeeid" : 1, "employee" : { "name" : "Austin", "credit" : 100 } }

Mongodb  被忽略的 数据类型 索引种类 与限制  与如何导向开发者 (1 常用数据类型)_数据_05


4  数组类型 ,数组类型类似与OBJECT ,只是内容限定为一个数组

> var array_1=["yes","no"]

> var array_2=["commit","rollback"]

> db.data.insert({type1:array_1,type2:array2})

> db.data.insert({type1:array_1,type2:array_2})

WriteResult({ "nInserted" : 1 })

Mongodb  被忽略的 数据类型 索引种类 与限制  与如何导向开发者 (1 常用数据类型)_mongodb_06


5 Binary data 对于一些图片或声音的信息可以将数据转换为二进制的格式,并将数据插入到MONGODB 中,这里就需要通过BinData 函数来将二进制数据存入MONGODB


> var a = BinData(0,"JA4A8gAxqTwciCuF5GGzAA==")

> db.data.insert({valueBinary:a})

WriteResult({ "nInserted" : 1 })

Mongodb  被忽略的 数据类型 索引种类 与限制  与如何导向开发者 (1 常用数据类型)_mongodb_07


6  ObjectId 这个数据类型主要的使用场景是在每个collection中的主键中,通过12 字节的方式进行存储,其中包含了时间戳,机器的专有ID,以及当时的进程ID,保证主键的不重复性


Mongodb  被忽略的 数据类型 索引种类 与限制  与如何导向开发者 (1 常用数据类型)_数据_08


7  Date 类型

Date 时间类型有两种表达的方式,UTC时间,

> var date1=Date()

> var date2=new Date()

> var date3=new ISODate()

> db.data.insert({date1:date1,date2:date2,date3:date3})


Mongodb  被忽略的 数据类型 索引种类 与限制  与如何导向开发者 (1 常用数据类型)_数据类型_09


返回的数据格式以string 类型为主的当地时间,和以UTC 为主的可以进行计算的时间给是


8  NULL 类型

这种类型对于非关系型数据库本身看似没有意义,但如果一个collection 中的document 数据本身需要表达某个key 并没有值,可以使用这种方式来模拟二维表格


9  Timestamp

虽然MOGNODB 有时间类型,但如果一个信息的输入中在一秒钟输入大量的数据,那么到底这批数据输入的顺序就不好被定义,这里通过timestamp 类型可以在同一秒的情况下,输入多个document 也能分辨出到数据的输入的顺序。

> db.data.insertOne({name:"1",ts:new Timestamp()})

{

"acknowledged" : true,

"insertedId" : ObjectId("61ed089e9e39097058d2c3cf")


Mongodb  被忽略的 数据类型 索引种类 与限制  与如何导向开发者 (1 常用数据类型)_数据类型_10

同时这些数据还可以转换为时间

> var timestamp = Timestamp(1642924190, 1)

> print( new Date(timestamp.t*1000+timestamp.i))

Sun Jan 23 2022 02:49:50 GMT-0500 (EST)


Mongodb  被忽略的 数据类型 索引种类 与限制  与如何导向开发者 (1 常用数据类型)_数据_11


10  int  

int 类型在MongoDB中表达的含义与传统的数据库是一致的,都是表达一个整数值。


以上的数据类型都是常用的类型,当然提到的java script 等类型这里并未介绍,在使用中并未遇到场景,这里就忽略了。


关于每个类型的占用的存储空间下面有一个LIST


1  OBJECT 12bytes

Mongodb  被忽略的 数据类型 索引种类 与限制  与如何导向开发者 (1 常用数据类型)_数据_12

2  INT 类型  4个字节


3  Double  8字节 NumberDecimal 16字节


4  date 占用8个字节


5 Timestamp 8个字节


6  String 类型采用UTF-8类型进行存储,英文,字符为2个字节,中文为3个字节,其他特殊字符为4个字节存储


对于以上的数据类型,可以通过类型判断来查找记录中符合某一种数据类型的记录


1 整体的记录

Mongodb  被忽略的 数据类型 索引种类 与限制  与如何导向开发者 (1 常用数据类型)_mongodb_13


2  执行命令

> db.data.find({"ts":{$type:"timestamp"}})

{ "_id" : ObjectId("61ed089e9e39097058d2c3cf"), "name" : "2", "ts" : Timestamp(1642924190, 1) }

> db.data.find({"employeeid":{$type:"int"}})

> db.data.find({"employeeid":{$type:"double"}})

{ "_id" : ObjectId("61ecb3d79e39097058d2c3cb"), "employeeid" : 1, "employee" : { "name" : "Austin", "credit" : 100 } }


3 执行结果



Mongodb  被忽略的 数据类型 索引种类 与限制  与如何导向开发者 (1 常用数据类型)_数据类型_14


Mongodb  被忽略的 数据类型 索引种类 与限制  与如何导向开发者 (1 常用数据类型)_mongodb_15


举报

相关推荐

0 条评论