西河刘卡车医 发表于 2025-3-19 22:03:19

使用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企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 使用PyMongo操作MongoDB(二)