四、文档操作详解
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企服之家,中国第一个企服评测及商务社交产业平台。 |