如何使用 Python 的 pymongo 模块进行多表查询数据?
比如 A 表为用户表(此表内没有用户充值信息[充值金额、充值日期]) B 表为充值表
想获取用户充值情况。
如何使用 Python 的 pymongo 模块进行多表查询数据?
3 回复
在 MongoDB 里没有传统 SQL 的“多表查询”,但你可以通过 $lookup 聚合操作来实现类似功能。$lookup 相当于 SQL 的 LEFT OUTER JOIN。下面是一个完整示例,假设你有 orders 和 users 两个集合,要通过 user_id 关联查询。
from pymongo import MongoClient
# 连接 MongoDB
client = MongoClient('mongodb://localhost:27017/')
db = client['your_database']
# 执行 $lookup 聚合查询
pipeline = [
{
'$lookup': {
'from': 'users', # 要关联的集合
'localField': 'user_id', # 本地集合的关联字段
'foreignField': '_id', # 目标集合的关联字段
'as': 'user_info' # 输出字段名
}
},
{
'$unwind': '$user_info' # 将数组展开为对象(如果是一对一)
},
{
'$project': { # 选择要返回的字段
'order_id': 1,
'amount': 1,
'user_name': '$user_info.name',
'user_email': '$user_info.email'
}
}
]
# 执行查询
results = db.orders.aggregate(pipeline)
# 打印结果
for doc in results:
print(doc)
关键点解释:
$lookup是核心,它把users集合中匹配_id等于orders.user_id的文档,作为一个数组放到user_info字段里。$unwind把user_info数组拆开,变成单个对象(如果确定是一对一关系)。$project用来控制输出格式,这里只选了订单ID、金额和关联的用户名、邮箱。
注意: 如果是一对多关系(比如一个用户有多个订单),就不需要 $unwind,直接处理数组即可。
总结:用 aggregate 管道里的 $lookup 阶段来实现多集合关联查询。
find 两次,不过一般不这样用 MongoDB,最好把 b 表的数据存在 a 表里
类似 SQL 的 Join ?用 aggregation,$lookup

