Python MongoDB

Python MongoDB知识点汇总(小白版)

Python MongoDB知识点汇总

编程小白的通俗易懂指南

📚 MongoDB基础概念

什么是MongoDB?

MongoDB是一个非关系型数据库(NoSQL),与传统的关系型数据库(如MySQL)不同,它以类似JSON的格式存储数据,非常灵活。

核心概念类比

📁 数据库(Database)

像一个文件柜,里面可以放多个文件夹(集合)

🗂️ 集合(Collection)

像文件夹,里面存放具体的文件(文档)

📄 文档(Document)

像文件,是实际存储数据的地方,使用类似JSON的格式(BSON)

🔑 为什么使用MongoDB?

  • 数据结构灵活,不需要预先定义表结构
  • 适合存储半结构化或非结构化数据
  • 水平扩展容易,适合大数据量场景
  • 与Python配合良好,特别适合Web开发

🐍 Python连接MongoDB

安装PyMongo

PyMongo是Python操作MongoDB的官方驱动库

pip install pymongo

建立连接

from pymongo import MongoClient

# 连接到本地MongoDB服务
client = MongoClient('mongodb://localhost:27017/')

# 连接到数据库(不存在则创建)
db = client['mydatabase']

# 连接到集合(不存在则创建)
collection = db['mycollection']

连接远程数据库

# 带用户名密码的连接
client = MongoClient('mongodb://username:password@host:27017/')

💡 注意事项

  • 27017是MongoDB的默认端口
  • 数据库和集合在第一次插入数据时才会真正创建
  • 生产环境一定要使用用户名密码认证

➕ 数据操作(CRUD)

插入数据

# 插入单个文档
student = {"name": "张三", "age": 20, "major": "计算机科学"}
result = collection.insert_one(student)
print("插入ID:", result.inserted_id)

# 插入多个文档
students = [
    {"name": "李四", "age": 22, "major": "数学"},
    {"name": "王五", "age": 21, "major": "物理"}
]
result = collection.insert_many(students)
print("插入IDs:", result.inserted_ids)

查询数据

# 查询单个文档
result = collection.find_one({"name": "张三"})
print(result)

# 查询所有文档
for student in collection.find():
    print(student)

# 条件查询(年龄大于20)
for student in collection.find({"age": {"$gt": 20}}):
    print(student)

更新数据

# 更新单个文档
collection.update_one(
    {"name": "张三"},
    {"$set": {"age": 21}}
)

# 更新多个文档(所有数学专业年龄+1)
collection.update_many(
    {"major": "数学"},
    {"$inc": {"age": 1}}
)

删除数据

# 删除单个文档
collection.delete_one({"name": "张三"})

# 删除多个文档
collection.delete_many({"major": "数学"})

🔍 高级查询技巧

查询运算符

  • $gt:大于(great than)
  • $lt:小于(less than)
  • $ne:不等于(not equal)
  • $in:在数组中
  • $regex:正则表达式匹配
# 年龄在20到25之间的学生
collection.find({"age": {"$gte": 20, "$lte": 25}})

投影(选择返回字段)

# 只返回name和age字段,不返回_id
for student in collection.find({}, {"_id": 0, "name": 1, "age": 1}):
    print(student)

排序与限制

# 按年龄降序排序,取前5个
for student in collection.find().sort("age", -1).limit(5):
    print(student)

聚合管道

用于复杂的数据处理和分组操作

# 按专业分组统计平均年龄
pipeline = [
    {"$group": {"_id": "$major", "avg_age": {"$avg": "$age"}}}
]
results = collection.aggregate(pipeline)
for res in results:
    print(res)

⚙️ 索引与管理

为什么需要索引?

索引就像书的目录,可以大大加快查询速度,特别是数据量大的时候。

创建索引

# 单字段索引
collection.create_index("name")

# 复合索引
collection.create_index([("major", 1), ("age", -1)])

# 唯一索引(防止重复)
collection.create_index("email", unique=True)

数据库管理

# 列出所有数据库
print(client.list_database_names())

# 列出所有集合
print(db.list_collection_names())

# 删除集合
db.drop_collection("mycollection")

# 删除数据库
client.drop_database("mydatabase")

💡 实用建议

  • 为经常查询的字段创建索引
  • 避免返回大结果集(使用limit)
  • 定期备份重要数据
  • 生产环境使用副本集保证高可用

✅ 最佳实践

文档设计原则

  • 将经常一起访问的数据放在同一文档中
  • 避免创建巨大的文档(超过16MB)
  • 避免深度嵌套(嵌套层级不宜过深)
  • 使用有意义的字段名(但不要过长)

安全注意事项

  • 永远不要在生产环境使用无密码的MongoDB
  • 使用角色访问控制(RBAC)
  • 启用网络加密(TLS/SSL)
  • 定期更新MongoDB版本

常见错误

  • 忘记关闭数据库连接(使用with语句可自动关闭)
  • 混淆insert_one和insert_many
  • 忘记处理重复键错误(唯一索引)
  • 在循环中执行大量数据库操作(性能差)

📈 学习路径建议

  1. 掌握基本CRUD操作
  2. 学习查询运算符和投影
  3. 练习索引创建与管理
  4. 学习聚合管道
  5. 了解安全配置

💡 提示:本指南专为编程新手设计,实际开发中请查阅官方文档获取最新信息

© 2023 Python MongoDB学习指南 | 编程小白友好版

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部