当前位置: 首页 > news >正文

MongoDb(②pymongo)

一:连接 MongoDB

# 1. 先安装pymongo(如果没安装)
# 打开命令行执行:pip install pymongo -i https://mirrors.aliyun.com/pypi/simple/# 2. 导入pymongo的MongoClient
from pymongo import MongoClient# 3. 连接本地MongoDB(默认地址是localhost:27017)
client = MongoClient('mongodb://localhost:27017/')# 4. 测试连接是否成功
try:# 尝试获取数据库列表,能获取到说明连接成功client.list_database_names()print(client.list_database_names())print("连接MongoDB成功!")
except Exception as e:print("连接失败:", e)
finally:# 用完后关闭连接client.close()

client.list_database_names() 返回的结果是一个 列表 (list),列表中包含了您连接的 MongoDB 服务器上的所有数据库的名称。

例如,如果您在 MongoDB 中创建了 mydatausers 这两个数据库,那么 client.list_database_names() 可能会返回类似下面这样的结果:

['admin', 'config', 'local', 'mydata', 'users']

二:选择 / 创建数据库和集合

MongoDB 不需要提前创建数据库和集合,使用时直接指定即可。

from pymongo import MongoClientclient = MongoClient('mongodb://localhost:27017/')# 1. 选择或创建数据库(如果不存在,插入数据时会自动创建)
db = client['mydb']  # 数据库名:mydb
print("当前数据库:", db.name)# 2. 选择或创建集合(类似表格,不存在则自动创建)
collection = db['students']  # 集合名:students
print("当前集合:", collection.name)client.close()

三:插入数据(单条)

向集合中插入一条文档(类似一行数据,格式是字典)。

from pymongo import MongoClientclient = MongoClient('mongodb://localhost:27017/')
db = client['mydb']
collection = db['students']# 准备一条数据(字典格式,类似JSON)
student = {"name": "小明","age": 18,"gender": "男","score": 90
}# 插入单条数据
result = collection.insert_one(student)# 打印插入结果(获取自动生成的ID)
print("插入成功,数据ID:", result.inserted_id)client.close()

插入的字典会自动添加一个 _id 字段(唯一标识,类似主键)
insert_one() 的返回值可以获取插入数据的 ID

四:插入数据(多条)

from pymongo import MongoClientclient = MongoClient('mongodb://localhost:27017/')
db = client['mydb']
collection = db['students']# 准备多条数据(列表包含多个字典)
students = [{"name": "小红", "age": 17, "gender": "女", "score": 95},{"name": "小刚", "age": 19, "gender": "男", "score": 85},{"name": "小丽", "age": 18, "gender": "女", "score": 92}
]# 插入多条数据
result = collection.insert_many(students)# 打印所有插入数据的ID
print("插入成功,多条数据ID:", result.inserted_ids)client.close()

用列表 [] 包含多个字典,传给 insert_many()
返回的 inserted_ids 是一个列表,包含所有插入数据的 ID

五:查询数据(基础查询)

from pymongo import MongoClientclient = MongoClient('mongodb://localhost:27017/')
db = client['mydb']
collection = db['students']# 1. 查询单条数据(find_one(),默认返回第一条)
first_student = collection.find_one()
print("第一条数据:", first_student)# 2. 条件查询单条(找name=小红的数据)
xiaohong = collection.find_one({"name": "小红"})
print("小红的数据:", xiaohong)# 3. 查询多条数据(find(),返回所有符合条件的数据)
# 查所有数据
all_students = list(collection.find())  # 转成列表方便查看
print("\n所有学生:", all_students)# 条件查询多条(查gender=女的数据)
girls = list(collection.find({"gender": "女"}))
print("女生数据:", girls)client.close()

六:查询数据(高级筛选)

from pymongo import MongoClientclient = MongoClient('mongodb://localhost:27017/')
db = client['mydb']
collection = db['students']# 1. 筛选显示的字段(只看name和score,不显示_id)
# 格式:{字段名: 1(显示)或 0(不显示)},_id默认显示,需要手动隐藏
filtered = list(collection.find({"gender": "女"},  # 条件:女生{"name": 1, "score": 1, "_id": 0}  # 只显示name和score
))
print("女生的姓名和成绩:", filtered)# 2. 条件符查询(查score>90的学生,$gt表示大于)
high_score = list(collection.find({"score": {"$gt": 90}}  # 分数大于90
))
print("\n分数大于90的学生:", high_score)# 3. 排序(按age升序,1=升序,-1=降序)
sorted_by_age = list(collection.find().sort("age", 1))
print("\n按年龄升序排列:", sorted_by_age)client.close()

七:更新数据

修改已存在的数据。

from pymongo import MongoClientclient = MongoClient('mongodb://localhost:27017/')
db = client['mydb']
collection = db['students']# 1. 更新单条数据(将小明的age改为19)
# 格式:update_one(条件, {"$set": {要更新的字段}})
result = collection.update_one({"name": "小明"},  # 条件:找到name=小明{"$set": {"age": 19, "score": 92}}  # 要更新的字段:年龄和分数
)
print(f"更新单条:匹配到{result.matched_count}条,修改了{result.modified_count}条")# 2. 更新多条数据(将所有女生的score加5分,$inc表示增加)
result = collection.update_many({"gender": "女"},  # 条件:女生{"$inc": {"score": 5}}  # 分数+5
)
print(f"更新多条:匹配到{result.matched_count}条,修改了{result.modified_count}条")client.close()

$set:设置字段值(覆盖旧值)
$inc:对数值字段进行增减(如 {"$inc": {"age": 1}} 表示年龄 + 1)

八:删除数据

删除不需要的数据。

from pymongo import MongoClientclient = MongoClient('mongodb://localhost:27017/')
db = client['mydb']
collection = db['students']# 1. 删除单条数据(删除name=小刚的数据)
result = collection.delete_one({"name": "小刚"})
print(f"删除单条:删除了{result.deleted_count}条")# 2. 删除多条数据(删除score<90的学生)
result = collection.delete_many({"score": {"$lt": 90}})
print(f"删除多条:删除了{result.deleted_count}条")client.close()

123

http://www.dtcms.com/a/362782.html

相关文章:

  • 豪华酒店品牌自营APP差异对比分析到产品重构
  • 腾讯混元世界模型Voyager开源:单图生成3D世界的“核弹级”突破,游戏、VR、自动驾驶迎来新变量
  • C++ 面试高频考点 力扣 852. 山脉数组的峰顶索引 二分查找 题解 每日一题
  • ansible循环
  • GitHub Classroom:编程教育的高效协作方案
  • 从零开始的云计算生活——第五十七天,蓄势待发,DevOps模块
  • 数据量太大处理不了?Hadoop+Spark轻松解决海洋气象大数据分析难题
  • HQX SELinux 权限问题分析与解决
  • 使用 Avidemux 去除视频的重复帧
  • 亚马逊美加站点物流新规解读:库存处理逻辑重构与卖家应对策略
  • 两台电脑通过网线直连共享数据,设置正确,却互相ping不通的解决方法
  • 探索 UniHttp:解锁 Xml 及 JavaBean 序列化的多种方式
  • ASP.NET Core上传文件到minio
  • 嵌入式硬件 - 51单片机1
  • JVM中产生OOM(内存溢出)的8种典型情况及解决方案
  • 自从不小心踢了一脚主机之后,电脑频繁蓝屏、死机、无法开机……
  • 鸿蒙Next开发指南:XComponent与Progress组件的深度解析与实践
  • 睿思芯科正式加入龙蜥社区,携手共建 RISC-V 服务器生态新标杆
  • react+taro的使用整理
  • 【JavaEE】(21)Spring AOP
  • 解密GTH时钟架构:一网打尽收发器时钟之谜
  • 火语言 RPA 界面应用生成:低代码逻辑下的功能设计与场景适配
  • PowerPoint和WPS演示如何循环放映PPT
  • 想找Gamma的平替?这几款AI PPT工具值得试试
  • 从技术架构到经济价值:低代码在企业开发中的成本节约潜力
  • LeetCode 925.长按键入
  • 哈希表-面试题01.02.判定是否互为字符重排-力扣(LeetCode)
  • 趣味学RUST基础篇(HashMap)
  • 二叉树的非递归遍历 | 秋招面试必备
  • Spring Bean