mongodb和python交互
1.Scrapy_ImagePipeline保存图片2.Scrapy 保存数据案例-小说保存3.Scrapy 中 CrawlSpider 使用(一)4.Scrapy 中 CrawlSpider 使用(二)5.Scrapy 中 Request 的使用6.Scrapy_Request对象meta演示7.Scrapy_Request对象dont_filter演示8.Scrapy_Request对象Cookie的演示9.Scrapy_FormRequest对象的使用10.Scrapy中下载中间件11.Scrapy_下载中间件设置UserAgent12.Scrapy 中 Downloader 设置代理13.下载中间件实战-Scrapy与Selenium结合14.MongoDB介绍15.Mongo_如果快速学习Mongo16.Windows安装与启动MongoDB17.MongoDB通过配置文件管理参数18.Linux安装MongoDB19.什么是Docker20.为什么要使用Docker21.Docker核心概念22.Docker安装23.Docker核心命令_镜像命令24.Docker核心命令_容器命令25.Docker核心命令_其他命令26.Docker 安装 MongoDB27.MongoDB基础命令28.MongoDB数据的增加29.MongoDB数据的更新30.MongoDB删除文档31.MongoDB数据的查询32.Docker数据管理_为什么使用数据卷33.Docker数据管理_配置数据卷34.Docker数据管理_数据卷容器35.Docker实战_Mysql数据卷挂载36.MongoDB聚合操作之分组、过滤37.MongoDB聚合操作之排序、分页38.MongoDB索引Index39.Mongo中唯一索引\复合索引
40.mongodb和python交互
41.Splash反爬42.Dockerfile完全指南_什么是Dockerfile43.Dockerfile完全指南_构建镜像44.Dockerfile完全指南_常见的13种指令上45.Docker网络管理_Docker0网络详解46.Docker网络管理_四种网络模式47.Docker网络管理_自定义网络48.Scrapy保存数据到多个数据库49.Splash与requests结合50.Splash与Scrapy结合51.图片验证码介绍52.验证码-手动输入53.超级鹰识别验证码54.移动端爬虫55.移动端工具的安装56.模拟器配置57.Appium介绍58.Appium环境搭建 - Android SDK安装59.Appium环境搭建 - Appium安装60.appium实战61.滑动验证码-保存图片62.滑动验证码-获取滑动长度63.滑动验证码-编辑移动轨迹64.滑动验证码-移动滑块65.LOL皮肤66.Python调用 JS -PyExecJS, Python 调用 JS -js2pymongodb和python交互
安装环境
pip install pymongo==4.2.0
官方文档:https://pymongo.readthedocs.io/en/stable/
使用样例
引入包pymongo
import pymongo
连接,创建客户端
client = pymongo.MongoClient("localhost", 27017)
client = pymongo.MongoClient('mongodb://localhost:27017/')
获得数据库test1
db = client.test1
db = client['test']
获得集合movie
collection = db.movie
collection = db['movie']
添加数据
#增加一条
m1={name:'300集',actor:'高总',level:10}
m1_id = movie.insert_one(s1).inserted_id
#增加多条
mids = movie.insert_many([movie1,movie2])
注意
原insert方法也可以实现上面的功能,但是在PyMongo 3.x的版本已经不推荐使用了
查找数据
- find() 返回一个生成器对象
- find_one() 返回一条数据
result = movie.find_one() result = movie.find_one({'name':'300集'}) result = movie.find_one({'_id':OjectId('5932a80115c2606a59e8a049')}) result = movie.find_one({level:{'$gt':1}}) results = movie.find()
比较符号
符号 含义 示例 $lt 小于 {'age': {'$lt': 20}} $gt 大于 {'age': {'$gt': 20}} $lte 小于等于 {'age': {'$lte': 20}} $gte 大于等于 {'age': {'$gte': 20}} $ne 不等于 {'age': {'$ne': 20}} $in 在范围内 {'age': {'$in': [20, 23]}} $nin 不在范围内 {'age': {'$nin': [20, 23]}} 功能符号
符号 含义 示例 示例含义 $regex 匹配正则表达式 {'name': {'$regex': '^M.*'}} name以M开头 $exists 属性是否存在 {'name': {'$exists': True}} name属性存在 $type 类型判断 {'age': {'$type': 'int'}} age的类型为int $mod 数字模操作 {'age': {'$mod': [5, 0]}} 年龄模5余0 $text 文本查询 {'$text': {'$search': 'Mike'}} text类型的属性中包含Mike字符串 $where 高级条件查询 {'$where': 'obj.fans_count == obj.follows_count'} 自身粉丝数等于关注数 获取文档个数
-
count = movie.count_documents()
排序
-
results = collection.find().sort('name', pymongo.ASCENDING)
偏移/分页
collection.find().sort('name', pymongo.ASCENDING).skip(2).limit(2)
更新
result = collection.remove({'name': '300集'}) # 4.2版本不支持 result = collection.delete_one({'name': '300集'}) result = collection.delete_many({'age': {'$lt': 25}})
注意
update也可以实现上面的功能,但是在PyMongo 3.x的版本已经不推荐使用了
删除
-
result = collection.remove({'name': '300集'}) # 4.2版本不支持 result = collection.delete_one({'name': '300集'}) result = collection.delete_many({'age': {'$lt': 25}})
# pip install pymongo==4.2.0 import pymongo # 创建链接 client = pymongo.MongoClient() # 获取数据库实例 db1 = client.bjsxt db2 = client['bjsxt'] # 获取集合 c1 = db1.student c2 = db2['person'] # 操作数据 def add_data(): ''' 添加数据 ''' data1 = {'name':'张三','age':20,'score':100} data2 = {'name':'李四','age':22,'score':110} # c1.insert_one(data1) c1.insert_many([data1,data2]) def update_data(): # 改 args = {'name':'张三'} # c1.update_one(args,{'$set':{'age':24}}) c1.update_many(args,{'$set':{'age':23}}) def delete_data(): # 删除 c1.delete_one({'name':'张三'}) # 删除所有 # c1.delete_many({}) def search_data(): # 查询数据 rs1 = c2.find() #获取游标对象,需要遍历 for r in rs1: print(r) # rs2 = c2.find_one() # print(rs2) def search_data_arg(): # 查询数据 rs1 = c2.find({'age':{'$gt':20}}) #获取游标对象,需要遍历 for r in rs1: print(r) def search_data_func(): # 查询数据 # rs1 = c2.find({'age':{'$gt':20}}).sort('age') #获取游标对象,需要遍历 # rs1 = c2.find({'age':{'$gt':20}}).sort('age',pymongo.ASCENDING) #升序 # rs1 = c2.find({'age':{'$gt':20}}).sort('age',pymongo.DESCENDING) #降序 # 分页 # rs1 = c2.find({'age':{'$gt':20}}).sort('age',pymongo.DESCENDING).skip(4) #降序 rs1 = c2.find({'age':{'$gt':20}}).sort('age',pymongo.DESCENDING).skip(4).limit(6) #降序 for r in rs1: print(r) def search_data_count(): count = c2.count_documents({}) print(f'目前集合中有{count}条数据') if __name__ == '__main__': # add_data() # update_data() # delete_data() # search_data() # search_data_arg() # search_data_func() search_data_count()
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库