使用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}})

五、高级操作技巧

  1. 排序与分页

    # 按年龄降序排列,跳过前2条,取3条
    students.find().sort("age", -1).skip(2).limit(3)
    
  2. 聚合管道

    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)
    
  3. 索引管理

    # 创建单字段索引
    students.create_index("name")
    
    # 创建复合索引
    students.create_index([("age", 1), ("gender", -1)])
    
    # 查看索引
    print(students.index_information())
    

六、注意事项

  1. 连接安全:生产环境建议使用SSL加密连接
  2. 错误处理:使用try-except捕获ConnectionFailure等异常
  3. 性能优化:合理使用索引,避免全集合扫描
  4. 数据备份:定期使用mongodump进行数据备份

通过本文的详细讲解,开发者可以快速掌握PyMongo的核心操作。实际开发中应根据具体业务需求,结合MongoDB的丰富特性(如地理空间索引、事务支持等)进行深度开发。建议参考官方文档获取最新API说明和最佳实践。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值