Python 操作 MongoDB 讲解详细
作者:tigeriaf 发布时间:2021-11-28 10:00:46
目录
1、连接MongoDB
2、指定(切换)数据库
3、指定(切换)集合
4、插入数据
5、查询数据
6、统计查询
7、结果排序
8、偏移
9、更新数据
10、删除数据
1、连接MongoDB
需要使用Python
第三方库pymongo
来连接以及操作MongoDB
,可以使用pip install pymongo
进行安装。 可以使用下面代码来创建一个MongoDB
的连接对象。
import pymongo
client = pymongo.MongoClient(host='localhost', port=27017)
一般来说传入两个参数就可以,第一个参数为地址host(默认是localhost
)第二个参数为端口port(默认是27017)。
还有一种方法是host参数直接传入MongoDB
的连接字符串,例如:
client = pymongo.MongoClient('mongodb://localhost:27017')
2、指定(切换)数据库
db = client.test
# 或者
# db = client['test']
如果该数据库不存在,则自动创建,否则切换到指定数据库。 注意: 新创建的数据库,在没有插入数据之前在可视化工具里看不到。
3、指定(切换)集合
MongoDB
的数据库中包含很多集合collection
,类似于关系型数据库中的表,同样,我们可以使用下面和指定数据库类似的方式,指定要操作的集合。
collection = db.users
# 或者
collection = db['users']
4、插入数据
调用collection的insert_one()
方法可以插入单条数据。
user = {
'name': 'tigeriaf',
'gender': 'male',
'age': 24
}
collection.insert_one(user)
在MongoDB
中,每条数据都有一个唯一的_id属性,如果没有显式的指明_id
,MongoDB
会自动生成ObjectId
类型的_id属性。
当然我们也可以插入多条数据,使用的是insert_many()
方法,数据以列表形式传递。
user_list = [
{
'name': 'zhangsan',
'gender': 'male',
'age': 25
},
{
'name': 'lisi',
'gender': 'male',
'age': 24
},
{
'name': 'wangwu',
'gender': 'female',
'age': 24
}
]
collection.insert_many(user_list)
5、查询数据
通过find_one()
或find()
方法进行数据的查询,find_one()
查询返回单个结果,find()
返回多个结果。
result = collection.find_one({'name': 'tigeriaf'})
print(type(result), result)
我们查询的是name
为tigeriaf
的数据,返回结果是字典类型,运行结果如下:
<class 'dict'> {'_id': ObjectId('614be85f1cc0a98d6f034de7'), 'name': 'tigeriaf', 'gender': 'male'}
对于多条数据的查询,我们可以使用find()方法,例如在这里查找年龄为20的数据,示例如下:
results = collection.find({'gender': "male"})
print(results)
for result in results:
print(result)
运行结果如下:
<pymongo.cursor.Cursor object at 0x0BDF8210>
{'_id': ObjectId('614be85f1cc0a98d6f034de7'), 'name': 'tigeriaf', 'gender': 'male'}
{'_id': ObjectId('614beb3ad0f17d253e2ef81c'), 'name': 'zhangsan', 'gender': 'male'}
{'_id': ObjectId('614beb3ad0f17d253e2ef81d'), 'name': 'lisi', 'gender': 'male'}
返回结果是Cursor
类型,我们可以遍历取到所有的结果。
6、统计查询
可以调用count()
方法来统计查询结果的条数。
count = collection.find({'gender': "male"}).count()
print(count)
7、结果排序
可以调用sort()方法对查询的数据进行排序。
results = collection.find().sort('name', pymongo.ASCENDING)
for result in results:
print(result)
运行结果如下:
{'_id': ObjectId('614bf7fca5af6d1d46df0878'), 'name': 'lisi', 'gender': 'male', 'age': 24}
{'_id': ObjectId('614bf72ab1b973eae1b32fee'), 'name': 'tigeriaf', 'gender': 'male', 'age': 24}
{'_id': ObjectId('614bf7fca5af6d1d46df0879'), 'name': 'wangwu', 'gender': 'female', 'age': 24}
{'_id': ObjectId('614bf7fca5af6d1d46df0877'), 'name': 'zhangsan', 'gender': 'male', 'age': 25}
8、偏移
在某些情况下我们可能只想获取某几条数据,可以使用skip()方法进行偏移操作,比如skip(2)
,就忽略前2条数据,得到第3条之后的数据。
results = collection.find().sort('name', pymongo.ASCENDING).skip(2)
for result in results:
print(result)
运行结果如下:
{'_id': ObjectId('614bf7fca5af6d1d46df0879'), 'name': 'wangwu', 'gender': 'female', 'age': 24}
{'_id': ObjectId('614bf7fca5af6d1d46df0877'), 'name': 'zhangsan', 'gender': 'male', 'age': 25}
另外还可以使用limit()
方法限制结果个数。
results = collection.find().sort('name', pymongo.ASCENDING).skip(1).limit(2)
for result in results:
print(result)
运行结果如下:
{'_id': ObjectId('614bf72ab1b973eae1b32fee'), 'name': 'tigeriaf', 'gender': 'male', 'age': 24}
{'_id': ObjectId('614bf7fca5af6d1d46df0879'), 'name': 'wangwu', 'gender': 'female', 'age': 24}
9、更新数据
可以使用update_one()
方法和update_many()
方法对数据进行更新,update_one()
方法更新一条数据,update_many()
方法更新多条数据。
condition = {'name': 'wangwu'}
user = collection.find_one(condition)
user['age'] += 1
result = collection.update_one(condition, {'$set': user})
print(result)
print(result.matched_count, result.modified_count)
在这里调用了update_one()
方法修改name
为wangwu
的数据,第二个参数需要使用$类型操作符作为字典的键名,返回结果调用matched_count
和modified_count
属性可以获得匹配的数据条数和影响的数据条数。
运行结果如下:
<pymongo.results.UpdateResult object at 0x0C96E738>
1 1
调用update_many()
方法会更新所有符合条件的数据。
condition = {'age': 24}
result = collection.update_many(condition, {'$inc': {'age': 1}})
print(result)
print(result.matched_count, result.modified_count)
上述代码指定了查询条件为age
等于24,然后更新条件为{'$inc': {'age': 1}}
,也就是age
加1。
<pymongo.results.UpdateResult object at 0x0CB628A0>
2 2
可以看到更新了多条数据。
10、删除数据
可以使用delete_one()
方法和delete_many()
方法删除数据,delete_one()
方法删除一条数据,delete_many()
方法删除多条数据。
result = collection.delete_one({'name': 'zhangsan'})
print(result.deleted_count)
result = collection.delete_many({'gender': "male"})
print(result.deleted_count)
运行结果如下:
1
2
delete_one()
删除的是第一条符合条件的数据,delete_many()
删除的是所有符合条件的数据。
来源:https://juejin.cn/post/7012414116060987405


猜你喜欢
- 背景又很久没更新了,很幸运地新冠引发了严重的上呼吸道感染,大家羊过后注意休息和防护工作中(尤其是传统项目中)经常遇到这种需要,就是树形结构的
- 一、引入这段时间一直在学习Python的东西,以前就听说Python爬虫多厉害,正好现在学到这里,跟着小甲鱼的Python视频写了一个爬虫程
- 列表的添加1)+ 添加2)append 追加一次只能添加一个元素到列表中,适合用于循环里3)extend 拉伸可一次添加多个元素到列表中4)
- 最近在学着用easyui,发现框架用起来果然是方便简洁,能弄出这框架的都是大神级别了吧,牛啊....今天碰到这个应用可以说是让我非常之无语,
- sqllite里面并没有与numpy的array类型对应的数据类型,通常我们都需要将数组转换为text之后再插入到数据库中,或者以blob类
- 描述tan() 返回x弧度的正弦值。语法以下是 tan() 方法的语法:import mathmath.tan(x)注意:tan()是不能直
- 在修改后的文字后面加上: self.textEdit_6.moveCursor(QTextCursor.End)例子:self.textEd
- axios封装请求axios封装常见操作axios请求时的常见或者说是常用的操作,需要对常规的axios封装做出改变根据不同条件写出不同的效
- 目前在网络上多是单个条形图堆叠,没看到一组的条形图堆叠。代码如下:import numpy as npimport pandas as pd
- ASP中给函数传参确实是个麻烦事,当参数个数特别多的时候(比如有七八个或者更多的参数个数)差不多就要眼冒金星了,一个个的数吧。而且要命的是参
- python3 manage.py makemigrations # 生成数据库迁移文件python3 manage.py migrate
- 一、表示修饰符。可以在模块或者类的定义层内对函数进行修饰。出现在函数定义的前一行,不允许和函数定义在同一行。一个修饰符就是一个函数,它将被修
- 删除列表中元素的方法有三种:1. del命令使用del命令能够删除列表中指定位置上的元素,也可以删除整个列表。2. pop( )方法使用列表
- 误区 #12:TempDB的文件数和需要和CPU数目保持一致错误 哎,由于上述误区是微软“官方”的建议,
- Django实现内容缓存:1、内存缓存settings.py文件配置CACHES = { 'default':
- 本文根据最近学习TensorFlow书籍网络文章的情况,特将一些学习心得做了总结,详情如下.如有不当之处,请各位大拿多多指点,在此谢过。一、
- 背景时间过得太快了,春节假期感觉光速般就结束了,转眼间就要继续搬砖上班了。紧接着很快就要进入金三银四的求职面试高峰期,程序猿小枫还没有找到令
- 经常由于各种压缩格式的不一样用到文件的解压缩时就需要下载不同的解压缩工具去处理不同的文件,以至于桌面上的压缩工具就有三四种,于是使用pyth
- MaxDB是MySQL AB公司通过SAP认证的数据库。MaxDB数据库服务器补充了MySQL AB产品系列。某些MaxDB特性在MySQL
- 由于最近需要使用爬虫爬取数据进行测试,所以开始了爬虫的填坑之旅,那么首先就是先系统的学习下关于正则相关的知识啦。所以将下面正则方面的知识点做