目录
原文: 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.