使用PyMongo操作MongoDB(二)

打印 上一主题 下一主题

主题 1015|帖子 1015|积分 3045

四、文档操作详解

1. 插入文档

  1. # 插入单条文档
  2. student_data = {
  3.     "name": "张三",
  4.     "age": 20,
  5.     "gender": "男",
  6.     "courses": ["数学", "英语"]
  7. }
  8. result = students.insert_one(student_data)
  9. print(f"插入的文档ID:{result.inserted_id}")
  10. # 批量插入文档
  11. students.insert_many([
  12.     {"name": "李四", "age": 22, "gender": "女"},
  13.     {"name": "王五", "age": 21, "gender": "男"}
  14. ])
复制代码
2. 查询文档

底子查询

  1. # 查询所有文档
  2. for doc in students.find():
  3.     print(doc)
  4. # 查询单个文档
  5. print(students.find_one({"name": "张三"}))
复制代码
字段投影

  1. # 仅返回name和age字段(_id默认返回)
  2. for doc in students.find({}, {"name": 1, "age": 1}):
  3.     print(doc)
  4. # 排除_id字段
  5. for doc in students.find({}, {"_id": 0, "name": 1}):
  6.     print(doc)
复制代码
条件查询



  • 比较运算符
    1. # 年龄大于20的学生
    2. students.find({"age": {"$gt": 20}})
    3. # 年龄在20-22之间的学生
    4. students.find({
    5.     "age": {
    6.         "$gte": 20,
    7.         "$lte": 22
    8.     }
    9. })
    复制代码
  • 逻辑运算符
    1. # 年龄大于20且性别为男
    2. students.find({
    3.     "age": {"$gt": 20},
    4.     "gender": "男"
    5. })
    6. # 年龄小于18或性别为女
    7. students.find({
    8.     "$or": [
    9.         {"age": {"$lt": 18}},
    10.         {"gender": "女"}
    11.     ]
    12. })
    复制代码
  • 正则匹配
    1. # 查询姓名以"张"开头的学生
    2. students.find({"name": {"$regex": "^张"}})
    3. # 不区分大小写查询
    4. students.find({"name": {"$regex": "li", "$options": "i"}})
    复制代码
3. 更新文档

  1. # 更新单个文档(设置新字段)
  2. students.update_one(
  3.     {"name": "张三"},
  4.     {"$set": {"major": "计算机科学"}}
  5. )
  6. # 批量更新(年龄加1)
  7. students.update_many(
  8.     {"gender": "男"},
  9.     {"$inc": {"age": 1}}
  10. )
  11. # 替换整个文档
  12. students.replace_one(
  13.     {"name": "李四"},
  14.     {"name": "李四", "age": 23, "gender": "女", "major": "电子信息"}
  15. )
复制代码
4. 删除文档

  1. # 删除单个匹配文档
  2. students.delete_one({"name": "王五"})
  3. # 删除所有匹配文档
  4. students.delete_many({"age": {"$lt": 18}})
复制代码
五、高级操作技巧


  • 排序与分页
    1. # 按年龄降序排列,跳过前2条,取3条
    2. students.find().sort("age", -1).skip(2).limit(3)
    复制代码
  • 聚合管道
    1. from bson import Decimal128
    2. pipeline = [
    3.     {"$match": {"gender": "男"}},
    4.     {"$group": {"_id": "$major", "avg_age": {"$avg": "$age"}}},
    5.     {"$sort": {"avg_age": -1}}
    6. ]
    7. for doc in students.aggregate(pipeline):
    8.     print(doc)
    复制代码
  • 索引管理
    1. # 创建单字段索引
    2. students.create_index("name")
    3. # 创建复合索引
    4. students.create_index([("age", 1), ("gender", -1)])
    5. # 查看索引
    6. print(students.index_information())
    复制代码
六、留意事项


  • 连接安全:生产环境建议使用SSL加密连接
  • 错误处理:使用try-except捕获ConnectionFailure等异常
  • 性能优化:合理使用索引,克制全集合扫描
  • 数据备份:定期使用mongodump进行数据备份
通过本文的具体讲解,开发者可以快速把握PyMongo的核心操作。实际开发中应根据具体业务需求,结合MongoDB的丰富特性(如地理空间索引、变乱支持等)进行深度开发。建议参考官方文档获取最新API说明和最佳实践。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

西河刘卡车医

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表