【MongoDB数据类型】 �

目录

原文: http://blog.gqylpy.com/gqy/352

@(MongoDB数据类型)

在开始之前,我们先看看MongoDB有哪些数据类型
*
1. Object ID**
Documents(行)自动生成的 _id


2. String
字符串,必须是UTF-8


3. Boolean
布尔值,true/false


4. Integer
整数,有int32与int64之分,一般我们使用int32(正负21亿)


5. Double
浮点数MongoDB中没有float类型,所有小数都是Double类型


6. Arrays
数组/列表,一般在多个值对应一个键时使用


7. Object
相当于Python中的dict


8. TimeStamp
时间戳


9. Date
存储当前日期或时间,unix时间格式
我们一般不使用这个Date类型,时间戳可以秒杀一切时间类型



10. Null
空数据类型,一个特殊的概念,None Null

开始表演

一些比较好理解的数据类型,我们就直接跳过。

1. Object ID

> db.userinfo.findOne()
{ "_id" : ObjectId("5c20a72d844443be585559a4"), "name" : "张三" }

**"_id" : ObjectId("5c20a72d844443be585559a4")**

这是MongoDB生成的类似关系型DB表主键的唯一key,具体由24个字节组成:



"5c20a72d" 时间戳,产生这条数据的时间

"844443" 产生这条数据的机器编码


"be58" 进程ID,多进程存储数据时很有用


"5559a4" 计数器,注意:计数器的数字可能会重复



以上四种标示拼凑成世界上唯一的Object ID

只要是支持MongoDB的语言,都会有一个或多个方法对Object ID进行转换


⚠️注意:此类型不可以被JSON序列化

5. Double

> db.userinfo.find()
{ "_id" : ObjectId("5c20a72d844443be585559a4"), "name" : "张三", "height" : 1.82 }

MongoDB中没有float类型,所有的小数是都Double类型.

6. Arrays

{
    "_id" : ObjectId("5c20a72d844443be585559a4"),
    "name" : "张三",
    "height" : 1.82,
    "hobby" : [
        "抽烟",
        "喝酒",
        "汤头"
    ]  ⚠️
}

数组/列表,一般在多个值对应一个键时使用.

7. Object

> db.userinfo.findOne({name: "李四"})
{
    "_id" : ObjectId("5c20ad9a844443be585559a5"),
    "name" : "李四",
    "info" : {
        "gender" : "男",
        "height" : 1.82,
        "weight" : 60
    }  ⚠️
}

相当于Python中的dict

8. TimeStamp

> db.userinfo.insertOne({name: "张三", timestamp: Timestamp()})

> db.userinfo.findOne({name: "张三"})
{
    "_id" : ObjectId("5c20c48312af10035a00d668"),
    "name" : "张三",
    "timestamp" : Timestamp(1545651331, 1)  # 时间戳
}

9. Date

Date() 人类可识别的时间格式

> db.userinfo.insertOne({name: "李四", date: Date()})

> db.userinfo.findOne({name: "李四"})
{
    "_id" : ObjectId("5c20c53612af10035a00d669"),
    "name" : "李四",
    "date" : "Mon Dec 24 2018 19:38:30 GMT+0800 (CST)"  # 当前日期时间
}

new Date().valueOf() 转换为当前时间戳时间

> db.userinfo.insertOne({name: "李四", timestamp: new Date().valueOf()})

> db.userinfo.findOne({name: "李四"})
{
    "_id" : ObjectId("5c20c73412af10035a00d66e"),
    "name" : "李四",
    "timestamp" : 1545652020922  # 时间戳
}

new Date() 构建一个格林尼治时间
格林尼治时间和Date()时间相差8小时,我们是+8时区,也就是时差相差8,所以+8小时就是系统当前时间.

> db.userinfo.insertOne({name: "张三", new_data: new Date()})

> db.userinfo.findOne({name: "张三"})
{
    "_id" : ObjectId("5c20c87712af10035a00d66f"),
    "name" : "张三",
    "new_data" : ISODate("2018-12-24T11:52:23.256Z")  # 格林尼治时间
}

还有ISODate(),同样也是构建一个格林尼治时间

> ISODate()
ISODate("2018-12-24T11:59:14.740Z")

# 转换为时间戳
> ISODate().valueOf()
1545652789707

==MongoDB存储时间类型数据时,都是先将其转换为UTC时间,然后再存储到数据库中.==

10. Null

> db.userinfo.findOne({姓名: "王五"})
{ "_id" : ObjectId("5c20ae64844443be585559a6"), "name" : "王五", "hobby" : null }

空数据类型,一个特殊的概念, None Null.

原文: http://blog.gqylpy.com/gqy/352

上一篇:MongoDB-比较符及修改器


下一篇:mongodb插入文档时不传ObjectId