【Python基础】mongodb数据类型有哪些

2021-01-18 10:24发布

4条回答
小橘子
2楼 · 2021-01-18 10:37

MongoDB中有什么样的数据类型:

Object ID :Documents 自生成的 _id

String: 字符串,必须是utf-8

Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写)

Integer:整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)

Double:浮点数 (没有float类型,所有小数都是Double)

Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦)

Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典

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

Timestamp:时间戳

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

看着挺多的,但是真要是用的话,没那么复杂,很简单的哦


樱田妮妮NiNi
3楼 · 2021-01-18 10:48

-8 Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写) Integer:整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32) Double:浮点数 (没有float类型,所有小数都是Double) Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦) Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典 Null:空数据类型 , 一个特殊的概念,None Null Timestamp:时间戳 Date:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)

我的网名不再改
4楼 · 2021-01-22 12:50

一.MongoDB 之 数据类型世界

首先我们要先了解一下MongoDB中有什么样的数据类型:

Object  ID :Documents 自生成的 _id

String: 字符串,必须是utf-8

Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写)

Integer:整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)

Double:浮点数 (没有float类型,所有小数都是Double)

Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦)

Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典

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

Timestamp:时间戳

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

看着挺多的,但是真要是用的话,没那么复杂,很简单的哦

 

二.MongoDB 之 剖析MongoDB的数据类型

那么我们根据以上所说的数据类型(捡重点说,别整没用的)展开说明:

1.Object ID :

复制代码

复制代码

 : ObjectId()

#"" 代指的是时间戳,这条数据的产生时间
#"" 代指某台机器的机器码,存储这条数据时的机器编号
#"" 代指进程ID,多进程存储数据的时候,非常有用的
#"" 代指计数器,这里要注意的是,计数器的数字可能会出现重复,不是唯一的
#以上四种标识符拼凑成世界上唯一的ObjectID
#只要是支持MongoDB的语言,都会有一个或多个方法,对ObjectID进行转换
#可以得到以上四种信息

#注意:这个类型是不可以被JSON序列化的

复制代码

复制代码

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

0-8字节是时间戳,

9-14字节的机器标识符,表示MongoDB实例所在机器的不同;

15-18字节的进程id,表示相同机器的不同MongoDB进程。

19-24字节是计数器

 

2.String :

UTF-8字符串,记住是UTF-8字符串

 

3.Boolean :

true or false 这里首字母是小写的

 

4.Integer :

整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)

 

5.Double :

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

 

6.Arrays :

复制代码

复制代码

{    "_id" : ObjectId("5b163830993ddc4cd4918ead"),    "name" : "LuffyCity",    "teacher" : [        "DragonFire",        "WuSir2B",        "Alex AGod"
    ]
}

复制代码

复制代码

数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦

 

7.Object :

复制代码

复制代码

{    "_id" : ObjectId("5b163915993ddc4cd4918eaf"),    "name" : "LuffyCity",    "course" : {        "name" : "Python",        "price" : 19800
    }
}

复制代码

复制代码

如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典

 

8.Null :

{    "_id" : ObjectId("5b163a0e993ddc4cd4918eb0"),    "name" : "LuffyCity",    "course" : null
}

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

 

9.Timestamp :时间戳

{    "_id" : ObjectId("5b163bbf993ddc4cd4918eb3"),    "name" : "LuffyCity",    "date" : 1528183743111}

 

10.Date :

 

{    "_id" : ObjectId("5b163ba1993ddc4cd4918eb2"),    "name" : "LuffyCity",    "date" : ISODate("2018-06-05T15:28:33.705+08:00")
}

 存储当前日期或时间格式 (我们一般很少使用这个Date类型,因为时间戳可以秒杀一切时间类型)

 

 三. MongoDB 之 $关键字 及 $修改器

MongoDB中类似$set这样的关键字有很多, $lt $gt $lte $gte 等等,这么多我们也不方便记,这里我们说说几个比较常见的

一. 查询中常见的 $lt  $gt  $lte  $gte 

等于 : 在MongoDB中什么字段等于什么值其实就是 " : " 来搞定 比如 "name" : "路飞学城"

大于 : 在MongoDB中的 大于 > 号 我们用 : $gt  比如 :  "score" : { $gt : 80 } 就是 得到 "score" 大于 80 的数据

小于 : 在MongoDB中的 小于 < 号 我们用 : $lt  比如 :  "score" : { $lt : 80 } 就是 得到 "score" 小于 80 的数据

大于等于 : 在MongoDB中的 大于等于 >= 号 我们用 : $gte  比如 :  "score" : { $gte : 80 } 就是 得到 "score" 大于等于 80 的数据

小于等于 : 在MongoDB中的 小于等于 <= 号 我们用 : $lte  比如 :  "score" : { $lte : 80 } 就是 得到 "score" 小于等于 80 的数据

这就是MongoDB中的运算符,是不是很类似我们使用的ORM中的运算符啊,没错,最开始的时候我们就已经说了,MongoDB的操作就是很类似ORM的

 

二.MongoDB之update修改器

在此前的update中,我们用过$set,对数据进行过更新,其实在update中还存在很多的$关键字,我们把update中的这些关键字叫做 修改器

修改器很多,这里挑一些重要的来说一说:

1.$inc : Python中的  变量 += 1 , 将查询到的结果 加上某一个值 然后保存

还是刚才Collection数据,我们来试一下$inc , 让不及格的 "路飞学城2" 变成 60 分

成功了 , {$inc:{"score":1}}的意思是,"score"的原有数值上面 +1,那我们再来实验一次,把60改为20,这怎么操作呢,其实可以理解为在 60 上加一个 -40

又成功了 , {$inc:{"score":-20}}

$inc 的用法就是原有基础上在增加多少

 

2.$set : 此前我们已经提到过 $set 的用法和特性(没有就自动添加一条)了

再做一个例子:把 "score" 为 100 分 的 "english_name" 赋值为 "LuffyCity"

再把 "score" 为 20 分的 "score" 赋值为 59 分

 

3.$unset : 用来删除Key(field)的

做一个小例子 : 刚才我们有一个新的"english_name" 这个field ,现在我们来删除它

 {$unset:{"english_name" : 1}} 就是删除 "english_name" 这个 field 相当于 关系型数据库中删除了 字段

 

4. $push : 它是用来对Array (list)数据类型进行 增加 新元素的,相当于我们大Python中 list.append() 方法

做一个小例子 :首先我们要先对原有数据增加一个Array类型的field:

使用update $set 的方法只能为Document中的第一条添加

使用updateMany $set 的方法 可以为所有满足条件的 Document 添加 "test_list" , 注意我这里的条件为空 " {} " 就算是为空,也要写上"{}" 

要对列表进行添加了: 将 "score" 为 100 的Document 中"test_list" 添加一个 6

$push 是在 Array(list) 的尾端加入一个新的元素  {$push : {"test_list" : 6}}

 

5.$pull : 有了$push 对Array类型进行增加,就一定有办法对其内部进行删减,$pull 就是指定删除Array中的某一个元素

做一个例子: 把我们刚才$push进去的 6 删除掉

问题来了,如果 Array 数据类型中 如果有 多个 6 怎么办呢?

全部删掉了.....

得出了一个结论,只要满足条件,就会将Array中所有满足条件的数据全部清除掉

 

6. $pop : 指定删除Array中的第一个 或 最后一个 元素

做个小例子: 删除"score" 等于 100 分  test_list 的最后一个元素

怎么删除第一个呢?

{$pop:{"test_list" : -1}}  -1 代表最前面, 1 代表最后边 

三. MongoDB之 "$"的其他用法

在MongoDB中有一个非常神奇的符号 "$"

"$"  在 update 中 加上关键字 就 变成了 修改器

其实 "$" 字符 独立出现也是有意义的 , 我起名叫做代指符

首先看个例子: 还是这个Collection

现在把 "score": 100 的 test_list 里面的 2 改为 9

{$set :{"test_list.0" : 9}} 这样就是对应 Array 中的下标进行修改了 "test_list.下标"

问题来了 如果 是 一个很长很长很长的 Array 你要查找其中一个值,把这个值修改一下怎么整呢?

神奇不神奇?

$ 字符 在语句中代表了什么呢? 下标,位置

解释一下: 首先我们查询一下db.Oldboy.findOne({"score":100,"test_list":3}) 返回 给我们满足条件的数据对吧

那么 如果 我们 使用 update的话, 满足条件的数据下标位置就会传递到 $ 字符中,在我们更新操作的时候就相当于 对这个位置 的元素进行操作


征戰撩四汸
5楼 · 2022-01-20 15:15

1、 null:    null用于表示空值或者不存在的字段。 {"x":null}

2、布尔:  布尔类型有两个值'true'和'false1'. {"X":true}


3、32位整数:  类型不可用。JavaScript仅支持64位浮点数,所以32位整数会被自动转换。


4、64位整数:  不支持这个类型。shell会使用一个特殊的内嵌文档来显示64位整数,


5、64位浮点数:  shell中的数字都是这种类型。下面的表示都是浮点数: {"X" : 3.1415926} {"X" : 3}

6、字符串:   UTF-8字符串都可表示为字符串类型的数据: {"x" : "foobar"}


7、符号:  不支持这种类型。shell将数据库里的符号类型转换成字符串。


8、对象id:  对象id是文档的12字节的唯一 ID, {"X" :ObjectId() }


9、日期:  日期类型存储的是从标准纪元开始的毫秒数。不存储时区: {"X" : new Date()}


10、正则表达式:  文档中可以包含正则表达式,采用JavaScript的正则表达式语法: {"x" : /foobar/i}


11、代码:  文档中还可以包含JavaScript代码:{"x" : function() { /* …… */ }}


12、二进制数据:  二进制数据可以由任意字节的串组成。不过shell中无法使用。


13、最大值:  BSON包括一个特殊类型,表示可能的最大值。shell中没有这个类型。


14、最小值:  BSON包括一个特殊类型,表示可能的最小值。shell中没有这个类型。


15、未定义:  文档中也可以使用未定义类型:{"x":undefined}


16、数组:  值的集合或者列表可以表示成数组:{"x" : ["a", "b", "c"]}


17、内嵌文档:  文档可以包含别的文档,也可以作为值嵌入到父文档中,数据可以组织得更自然些,不用非得存成扁平结构的:{"x" : {"food" : "noodle"}}

 


相关问题推荐

  • 回答 3

    换行。比如,print hello\nworld效果就是helloworld\n就是一个换行符。\是转义的意思,&#39;\n&#39;是换行,&#39;\t&#39;是tab,&#39;\\&#39;是,\ 是在编写程序中句子太长百,人为换行后加上\但print出来是一整行。...

  • 回答 42

    十种常见排序算法一般分为以下几种:(1)非线性时间比较类排序:a. 交换类排序(快速排序、冒泡排序)b. 插入类排序(简单插入排序、希尔排序)c. 选择类排序(简单选择排序、堆排序)d. 归并排序(二路归并排序、多路归并排序)(2)线性时间非比较类排序:...

  • 回答 70
    已采纳

    前景很好,中国正在产业升级,工业机器人和人工智能方面都会是强烈的热点,而且正好是在3~5年以后的时间。难度,肯定高,要求你有创新的思维能力,高数中的微积分、数列等等必须得非常好,软件编程(基础的应用最广泛的语言:C/C++)必须得很好,微电子(数字电...

  • 回答 28

    迭代器与生成器的区别:(1)生成器:生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。而且记录了程序执行的上下文。生成器不仅记住了它的数据状态,生成器还记住了程序...

  • 回答 9

    python中title( )属于python中字符串函数,返回’标题化‘的字符串,就是单词的开头为大写,其余为小写

  • 回答 6

    第一种解释:代码中的cnt是count的简称,一种电脑计算机内部的数学函数的名字,在Excel办公软件中计算参数列表中的数字项的个数;在数据库( sq| server或者access )中可以用来统计符合条件的数据条数。函数COUNT在计数时,将把数值型的数字计算进去;但是...

  • 回答 1

    head是方法,所以需要取小括号,即dataset.head()显示的则是前5行。data[:, :-1]和data[:, -1]。另外,如果想通过位置取数据,请使用iloc,即dataset.iloc[:, :-1]和dataset.iloc[:, -1],前者表示的是取所有行,但不包括最后一列的数据,结果是个DataFrame。...

  • Python入门简单吗2021-09-23 13:21
    回答 45

    挺简单的,其实课程内容没有我们想象的那么难、像我之前同学,完全零基础,培训了半年,直接出来就工作了,人家还在北京大公司上班,一个月15k,实力老厉害了

  • 回答 4

    Python针对众多的类型,提供了众多的内建函数来处理(内建是相对于导入import来说的,后面学习到包package时,将会介绍),这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作;如果某种操作只对特殊的某一类对象可行,Pyt...

  • 回答 8

     相当于 ... 这里不是注释

  • 回答 4

    还有FIXME

  • 回答 3

    python的两个库:xlrd和xlutils。 xlrd打开excel,但是打开的excel并不能直接写入数据,需要用xlutils主要是复制一份出来,实现后续的写入功能。

  • 回答 8

    单行注释:Python中的单行注释一般是以#开头的,#右边的文字都会被当做解释说明的内容,不会被当做执行的程序。为了保证代码的可读性,一般会在#后面加一两个空格然后在编写解释内容。示例:#  单行注释print(hello world)注释可以放在代码上面也可以放在代...

  • 回答 2

    主要是按行读取,然后就是写出判断逻辑来勘测行是否为注视行,空行,编码行其他的:import linecachefile=open(&#39;3_2.txt&#39;,&#39;r&#39;)linecount=len(file.readlines())linecache.getline(&#39;3_2.txt&#39;,linecount)这样做的过程中发现一个问题,...

  • 回答 4

    或许是里面有没被注释的代码

  • 回答 26

    自学的话要看个人情况,可以先在B站找一下视频看一下

没有解决我的问题,去提问