菜鸟如何用python操作MongoDB?

今天分享给大家的是用Python操作MongoDB,一步一步带着你进行学习,保证你是新手也能学得会,快来看吧:
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活 。在这一节中,我们就来看看Python3下MongoDB的存储操作 。

菜鸟如何用python操作MongoDB?

文章插图
1.准备工作
在开始之前,请确保已经安装好了MongoDB并启动了其服务,并且安装好了Python的PyMongo库 。
连接MongoDB时,我们需要使用PyMongo库里面的MongoClient 。一般来说,传入MongoDB的IP及端口即可,其中第一个参数为地址host,第二个参数为端口port(如果不给它传递参数,默认是27017):
import pymongoclient = pymongo.MongoClient(host='localhost', port=27017)这样就可以创建MongoDB的连接对象了 。
另外,MongoClient的第一个参数host还可以直接传入MongoDB的连接字符串,它以mongodb开头,例如:
client = MongoClient('mongodb://localhost:27017/')这也可以达到同样的连接效果 。
2.指定数据集
MongoDB中可以建立多个数据库,接下来我们需要指定操作哪个数据库 。这里我们以test数据库为例来说明,下一步需要在程序中指定要使用的数据库:
db = client.test这里调用client的test属性即可返回test数据库 。当然,我们也可以这样指定:
db = client['test']这两种方式是等价的 。
3.指定集合
MongoDB的每个数据库又包含许多集合(collection),它们类似于关系型数据库中的表 。
下一步需要指定要操作的集合,这里指定一个集合名称为students 。与指定数据库类似,指定集合也有两种方式:
collection = db.studentscollection = db['students']这样我们便声明了一个Collection对象 。
4.插入数据
接下来,便可以插入数据了 。对于students这个集合,新建一条学生数据,这条数据以字典形式表示:
student = { 'id': '20170101', 'name': 'Jordan', 'age': 20, 'gender': 'male'}这里指定了学生的学号、姓名、年龄和性别 。接下来,直接调用collection的insert()方法即可插入数据,代码如下:
result = collection.insert(student)print(result)在MongoDB中,每条数据其实都有一个_id属性来唯一标识 。如果没有显式指明该属性,MongoDB会自动产生一个ObjectId类型的_id属性 。insert()方法会在执行后返回_id值 。
运行结果如下:
5932a68615c2606814c91f3d当然,我们也可以同时插入多条数据,只需要以列表形式传递即可,示例如下:
student1 = { 'id': '20170101', 'name': 'Jordan', 'age': 20, 'gender': 'male'}student2 = { 'id': '20170202', 'name': 'Mike', 'age': 21, 'gender': 'male'}result = collection.insert([student1, student2])print(result)返回结果是对应的_id的集合:
[ObjectId('5932a80115c2606a59e8a048'), ObjectId('5932a80115c2606a59e8a049')]实际上,在PyMongo 3.x版本中,官方已经不推荐使用insert()方法了 。当然,继续使用也没有什么问题 。官方推荐使用insert_one()和insert_many()方法来分别插入单条记录和多条记录,示例如下:
student = { 'id': '20170101', 'name': 'Jordan', 'age': 20, 'gender': 'male'}result = collection.insert_one(student)print(result)print(result.inserted_id)运行结果如下:
<pymongo.results.InsertOneResult object at 0x10d68b558>5932ab0f15c2606f0c1cf6c5与insert()方法不同,这次返回的是InsertOneResult对象,我们可以调用其inserted_id属性获取_id 。
对于insert_many()方法,我们可以将数据以列表形式传递,示例如下:
student1 = { 'id': '20170101', 'name': 'Jordan', 'age': 20, 'gender': 'male'}student2 = { 'id': '20170202', 'name': 'Mike', 'age': 21, 'gender': 'male'}result = collection.insert_many([student1, student2])print(result)print(result.inserted_ids)运行结果如下:
<pymongo.results.InsertManyResult object at 0x101dea558>[ObjectId('5932abf415c2607083d3b2ac'), ObjectId('5932abf415c2607083d3b2ad')]该方法返回的类型是InsertManyResult,调用inserted_ids属性可以获取插入数据的_id列表 。
5.查询数据库
插入数据后,我们可以利用find_one()或find()方法进行查询,其中find_one()查询得到的是单个结果,find()则返回一个生成器对象 。示例如下:


推荐阅读