Pymongo入门学习笔记(二)


首先需要导入示例数据,导入方法可以在上一篇笔记末尾找到。

从Python连接MongoDB(PyMongo)

安装

从Python同样可以很方便的管理MongoDB数据库,官方推荐的方法是安装PyMongo插件。安装过程很简单,直接pip一下就可以了。

1
pip install pymongo

导入

安装完成后,从pymongo中导入MongoClient类。

1
from pymongo import MongoClient

创建连接

然后就可以使用MongoClient类连接到数据库。

1
client = MongoClient()

如果直接像上边这样连接的话,并没有对MongoClient进行任何配置,那么MongoClient会默认连接到localhost27017端口。

当然,也可以配置MongoClient连接的地址和端口,如下所示:

1
client = MongoClient("mongodb://mongodb0.example.net:27017")

连接到数据库对象

使用下面的语句,可以连接到名为primer的数据库,并把这个数据库对象分配给名为db的变量。如果不存在这个数据库,它将自动创建。

1
db = client.primer

或者这样也可以,

1
db = client['primer']

这样数据库的名字可以不受python命名的限制。

连接到集合

类似的,连接到一个名为dataset的集合,并且将这个集合对象赋给coll这个变量。

1
2
3
coll = db.dataset
# 或者使用下面的方式
coll = db['dataset']

数据的插入(insert)

使用pymongo插入数据有两种方法,一种是使用insert_one()方法,另一种是insert_many()。二者类似,不过前者接收的参数是一个文档,后者接收的参数是由多个文档组成的列表。如果插入数据到不存在的集合中,集合将自动创建。

1
2
3
result = db.restaurants.insert_one({"x":1})
# 可以查看插入的id
print(result.inserted_id)

如上的返回结果是一个ObjectId对象,如下所示:

1
ObjectId("54c1478ec2341ddf130f62b7")

insert_many()方法与insert_one()类似,不再赘述。

数据的查询(find)

在pymongo中,数据的查询可以使用find()方法。

查询集合中的所有文档

如果想要返回集合中的所有文档,可以不加参数调用find()方法。例如:

1
2
3
4
cursor = db.restaurants.find()
# 遍历cursor,并打印出所有文档
for document in cursor:
print(document)

通过字段查询

把{“字段”:”值”}放到查询条件中,以查询所有某个字段的值为指定值的文档。如果字段嵌入在某个文档或列表之中,可以使用点号连接。话不多说,看示例:

1
2
3
4
5
# 字段是顶级字段的情况
cursor = db.restaurants.find({"borough": "Manhattan"})

# 字段嵌入在文档或列表中
cursor = db.restaurants.find({"address.zipcode": "10075"})

通过操作符查询

通过操作符可以进行情况更为复杂的查询,比如值大于或小于某个指定数值。使用操作符的查询具有以下形式:

1
{<字段>: { <操作符>:<值> } }

比较常用的是比较操作符$gt(greater than,大于)和$lt(less than,小于)。

1
2
3
4
5
# 大于
cursor = db.restaurants.find({"grades.score": {"$gt": 30}})

# 小于
cursor = db.restaurants.find({"grades.score": {"$lt": 10}})

更多操作符可以在官方文档中找到。

联合查询

逻辑与

将查询条件并列起来,中间用逗号隔开,一并查询,可以查询到符合全部条件的结果。例如:

1
cursor = db.restaurants.find({"cuisine": "Italian", "address.zipcode": "10075"})

逻辑或

逻辑或的查询稍微复杂一下,需要将查询条件放入一个列表,并且使用$or操作符。例如:

1
2
cursor = db.restaurants.find(
{"$or": [{"cuisine": "Italian"}, {"address.zipcode": "10075"}]})

查询结果排序

使用sort()方法可以很方便的为查询结果进行排序,排序时需要指定升序或降序排列。如果指定pymongo.ASCENDING,就是升序排列,如果指定pymongo.DESCENDING,就是降序排列。

可以同时对多个字段进行排序。例如,下面的例子是县对borough字段进行升序排列,当borough字段相同时,使用address.zipcode字段进行降序排列。

1
2
3
4
5
import pymongo
cursor = db.restaurants.find().sort([
("borough", pymongo.ASCENDING),
("address.zipcode", pymongo.DESCENDING)
])

To Be Continued… …

谢谢支持!
0%