乐读窝

左手MongoDB,右手Redis

乐读窝 > 科普学习 > 左手MongoDB,右手Redis

3.6MongoDB与Python不通用的操作

书籍名:《左手MongoDB,右手Redis》    作者:谢乾坤



绝大部分情况下,MongoDB中的命令参数直接复制到Python中就可以使用,但有一些情况例外。假设数据集example_data_2如图3-60所示。

图3-60  数据集example_data_2

1.空值

在MongoDB中,空值写作null。在Python中,空值写作None。

MongoDB不认识None,Python不认识null。

为了从数据集example_data_2中查询出所有“grade”字段为空的数据,在Robo  3T中的查询语句为:

db.getCollection('example_data_2').find({'grade':  null})

运行效果如图3-61所示。

图3-61  查询grade为null的数据

如果直接把这段查询语句中的参数搬到Python中运行,则会导致报错,如图3-62所示。

图3-62  Python不认识null

Python会把null当作一个普通的变量,但是这个变量又没有定义,所以导致报错。

在  Python  中,要查询空值需要使用  None。对上述代码做一些修改——把“null”改为“None”,则查询成功,如图3-63所示。

图3-63  使用None作为空值查询成功

2.布尔值

布尔值就是“真”和“假”两个值。

在MongoDB中,“真”为true,“假”为false,首字母小写;在Python中,“真”为True,“假”为False,首字母大写。

在MongoDB中,查询所有student为true的记录,如图3-64所示。

图3-64  查询student字段为true的数据

如果把这段查询语句的参数直接复制到  Python  中,同样也会导致报错,因为  Python  会把true当作一个普通的变量,如图3-65所示。

图3-65  Python不认识true

把true改为True,则查询成功,如图3-66所示。

图3-66  把true改为True查询成功

3.排序参数

对查询到的结果进行排序是一个常见操作。在MongoDB中,sort()命令接收一个参数,这个参数是一个字典,Key是被排序的字段名,值为1或者−1。

对于数据集example_data_2,在Robo  3T中对“age”字段进行倒序排列,如图3-67所示。

图3-67  对age倒序排序

但在Python中,查询结果的sort()方法如果使用MongoDB的写法则会报错,如图3-68所示。

图3-68  Python中的sort()接收字典会报错

在Python中,sort()方法接收两个参数:第1个参数为字段名,第2个参数为-1或者1。写成如图3-69所示样子就能够正常运行。

图3-69  Python的sort()接收两个参数

4.查询_id

在Robo  3T中,可以根据_id的值来查询文档。此时查询语句如下:

运行效果如图3-70所示。

图3-70  根据_id查询数据

在安装PyMongo的同时,Python会自动安装一个叫作“bson”的第三方库。ObjectId这个类需要从bson库中导入,具体命令如下:

from  bson  import  ObjectId

collection.find({'_id':  ObjectId('5b2f75d26b78a61364d09f45')})

运行效果如图3-71所示。

图3-71  从bson库导入ObjectId类



本章小结


本章首先介绍了MongoDB的安装,然后介绍了MongoDB的图形化操作软件Robo  3T。通过Robo  3T的命令输入窗口输入命令,可实现对MongoDB数据库的增、删、改、查操作。

MongoDB的大部分操作都可以平滑移植到Python中。因此,大多数情况下,直接把Robo  3T中的MongoDB操作语句复制到Python中就能使用。当然,有很小一部分情况例外。