IT评测·应用市场-qidao123.com
标题:
使用PyMongo操作MongoDB(二)
[打印本页]
作者:
西河刘卡车医
时间:
2025-3-19 22:03
标题:
使用PyMongo操作MongoDB(二)
四、文档操作详解
1. 插入文档
# 插入单条文档
student_data = {
"name": "张三",
"age": 20,
"gender": "男",
"courses": ["数学", "英语"]
}
result = students.insert_one(student_data)
print(f"插入的文档ID:{result.inserted_id}")
# 批量插入文档
students.insert_many([
{"name": "李四", "age": 22, "gender": "女"},
{"name": "王五", "age": 21, "gender": "男"}
])
复制代码
2. 查询文档
底子查询
# 查询所有文档
for doc in students.find():
print(doc)
# 查询单个文档
print(students.find_one({"name": "张三"}))
复制代码
字段投影
# 仅返回name和age字段(_id默认返回)
for doc in students.find({}, {"name": 1, "age": 1}):
print(doc)
# 排除_id字段
for doc in students.find({}, {"_id": 0, "name": 1}):
print(doc)
复制代码
条件查询
比较运算符
# 年龄大于20的学生
students.find({"age": {"$gt": 20}})
# 年龄在20-22之间的学生
students.find({
"age": {
"$gte": 20,
"$lte": 22
}
})
复制代码
逻辑运算符
# 年龄大于20且性别为男
students.find({
"age": {"$gt": 20},
"gender": "男"
})
# 年龄小于18或性别为女
students.find({
"$or": [
{"age": {"$lt": 18}},
{"gender": "女"}
]
})
复制代码
正则匹配
# 查询姓名以"张"开头的学生
students.find({"name": {"$regex": "^张"}})
# 不区分大小写查询
students.find({"name": {"$regex": "li", "$options": "i"}})
复制代码
3. 更新文档
# 更新单个文档(设置新字段)
students.update_one(
{"name": "张三"},
{"$set": {"major": "计算机科学"}}
)
# 批量更新(年龄加1)
students.update_many(
{"gender": "男"},
{"$inc": {"age": 1}}
)
# 替换整个文档
students.replace_one(
{"name": "李四"},
{"name": "李四", "age": 23, "gender": "女", "major": "电子信息"}
)
复制代码
4. 删除文档
# 删除单个匹配文档
students.delete_one({"name": "王五"})
# 删除所有匹配文档
students.delete_many({"age": {"$lt": 18}})
复制代码
五、高级操作技巧
排序与分页
# 按年龄降序排列,跳过前2条,取3条
students.find().sort("age", -1).skip(2).limit(3)
复制代码
聚合管道
from bson import Decimal128
pipeline = [
{"$match": {"gender": "男"}},
{"$group": {"_id": "$major", "avg_age": {"$avg": "$age"}}},
{"$sort": {"avg_age": -1}}
]
for doc in students.aggregate(pipeline):
print(doc)
复制代码
索引管理
# 创建单字段索引
students.create_index("name")
# 创建复合索引
students.create_index([("age", 1), ("gender", -1)])
# 查看索引
print(students.index_information())
复制代码
六、留意事项
连接安全
:生产环境建议使用SSL加密连接
错误处理
:使用try-except捕获ConnectionFailure等异常
性能优化
:合理使用索引,克制全集合扫描
数据备份
:定期使用mongodump进行数据备份
通过本文的具体讲解,开发者可以快速把握PyMongo的核心操作。实际开发中应根据具体业务需求,结合MongoDB的丰富特性(如地理空间索引、变乱支持等)进行深度开发。建议参考官方文档获取最新API说明和最佳实践。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4