跳转至

Python3 MongoDB

概念与用途

MongoDB 是文档数据库,PyMongo 是官方 Python 驱动。文档以 BSON 存储,适合结构可演进的数据,但仍需设计 schema、索引和一致性边界。

核心 API

安装 python -m pip install "pymongo>=4.6",使用 MongoClient、数据库、集合三级对象。运行连接示例需要 MongoDB 4.4+ 或兼容服务、网络访问和凭据;URI 从环境变量读取。

import os
from pymongo import MongoClient

client = MongoClient(os.environ["MONGODB_URI"], serverSelectionTimeoutMS=3000)
try:
    print(client.admin.command("ping"))
    user = client.demo.users.find_one({"name": "Alice"}, {"_id": 0})
    print(user)
finally:
    client.close()

连接与查询规则

配置/API 用途 边界
serverSelectionTimeoutMS 服务发现上限 避免启动永久等待
connectTimeoutMS 建连上限 与查询超时不同
maxTimeMS 服务端查询上限 长查询必须限制
projection 限制返回字段 避免过量敏感数据

示例:生成安全过滤条件

def user_filter(name: str) -> dict[str, object]:
    if not name or len(name) > 64:
        raise ValueError("名称长度无效")
    if name.startswith("$"):
        raise ValueError("名称不能以 $ 开头")
    return {"name": name, "active": True}

print(user_filter("Alice"))

MongoClient 设计为长期复用且内部维护连接池,不应每次查询新建。应用关闭时调用 close();事务和写重试必须理解幂等性与集群能力。

常见错误与安全注意

  • 不要将用户提供的 JSON 直接作为查询条件,操作符注入可能绕过预期过滤。
  • 查询应设置投影、限制数量并为高频条件建立索引。
  • 使用认证、TLS、最小权限和网络访问控制,禁止数据库直接暴露公网。