首先需要导入示例数据,导入方法可以在上一篇笔记末尾找到。
从Python连接MongoDB(PyMongo)
安装
从Python同样可以很方便的管理MongoDB数据库,官方推荐的方法是安装PyMongo插件。安装过程很简单,直接pip一下就可以了。
1 | pip install pymongo |
导入
安装完成后,从pymongo中导入MongoClient类。
1 | from pymongo import MongoClient |
创建连接
然后就可以使用MongoClient类连接到数据库。
1 | client = MongoClient() |
如果直接像上边这样连接的话,并没有对MongoClient进行任何配置,那么MongoClient会默认连接到localhost的27017端口。
当然,也可以配置MongoClient连接的地址和端口,如下所示:
1 | client = MongoClient("mongodb://mongodb0.example.net:27017") |
连接到数据库对象
使用下面的语句,可以连接到名为primer的数据库,并把这个数据库对象分配给名为db的变量。如果不存在这个数据库,它将自动创建。
1 | db = client.primer |
或者这样也可以,
1 | db = client['primer'] |
这样数据库的名字可以不受python命名的限制。
连接到集合
类似的,连接到一个名为dataset的集合,并且将这个集合对象赋给coll这个变量。
1 | coll = db.dataset |
数据的插入(insert)
使用pymongo插入数据有两种方法,一种是使用insert_one()方法,另一种是insert_many()。二者类似,不过前者接收的参数是一个文档,后者接收的参数是由多个文档组成的列表。如果插入数据到不存在的集合中,集合将自动创建。
1 | result = db.restaurants.insert_one({"x":1}) |
如上的返回结果是一个ObjectId对象,如下所示:
1 | ObjectId("54c1478ec2341ddf130f62b7") |
insert_many()方法与insert_one()类似,不再赘述。
数据的查询(find)
在pymongo中,数据的查询可以使用find()方法。
查询集合中的所有文档
如果想要返回集合中的所有文档,可以不加参数调用find()方法。例如:
1 | cursor = db.restaurants.find() |
通过字段查询
把{“字段”:”值”}放到查询条件中,以查询所有某个字段的值为指定值的文档。如果字段嵌入在某个文档或列表之中,可以使用点号连接。话不多说,看示例:
1 | # 字段是顶级字段的情况 |
通过操作符查询
通过操作符可以进行情况更为复杂的查询,比如值大于或小于某个指定数值。使用操作符的查询具有以下形式:
1 | {<字段>: { <操作符>:<值> } } |
比较常用的是比较操作符$gt(greater than,大于)和$lt(less than,小于)。
1 | # 大于 |
更多操作符可以在官方文档中找到。
联合查询
逻辑与
将查询条件并列起来,中间用逗号隔开,一并查询,可以查询到符合全部条件的结果。例如:
1 | cursor = db.restaurants.find({"cuisine": "Italian", "address.zipcode": "10075"}) |
逻辑或
逻辑或的查询稍微复杂一下,需要将查询条件放入一个列表,并且使用$or操作符。例如:
1 | cursor = db.restaurants.find( |
查询结果排序
使用sort()方法可以很方便的为查询结果进行排序,排序时需要指定升序或降序排列。如果指定pymongo.ASCENDING,就是升序排列,如果指定pymongo.DESCENDING,就是降序排列。
可以同时对多个字段进行排序。例如,下面的例子是县对borough字段进行升序排列,当borough字段相同时,使用address.zipcode字段进行降序排列。
1 | import pymongo |