$lookup(跨集合关联)

最后更新:2026-10-09

$lookup(跨集合关联)

$lookup 在当前集合中执行与另一个集合的等值关联(left outer join),把匹配的文档作为数组附加到每条结果文档。它等价于 SQL 的 LEFT JOIN,让聚合管道可以跨集合组合数据,避免手动多次查询。注意:$lookup 只能做等值匹配,不能做范围或条件 join。

分类核心阶段
MongoDB 版本3.2+
示例语言mongosh (Shell)

📝 语法

{ $lookup: { from: <集合>, localField: <本地字段>, foreignField: <外部字段>, as: <输出数组> } }

▶ 示例

请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):

// $lookup:订单关联客户名
db.orders.aggregate([
  { $lookup: {
      from: "customers",
      localField: "cust_id",
      foreignField: "_id",
      as: "customer"
  } }
])

运行结果:

{ "_id": 1, "cust_id": "A123", "customer": [{ "_id": "A123", "name": "Alice" }] }

📌 注意事项

📚 相关教程

❓ 常见问题

Q$lookup 能替代数据库端的 JOIN 吗?
A能实现类似效果,但 MongoDB 的 $lookup 在查询时合并数据:等值匹配与管道内的简单比较可用索引,复杂条件 join 的优化能力不如 SQL 数据库全面,数据量极大时需评估性能。
Q$lookup 的性能如何优化?
A在关联集合的外键字段上建索引是关键。此外优先在管道前用 $match 缩小主集合,避免大集合全表关联。
Q$lookup 支持多条件关联吗?
A支持。3.6 起可用管道形式 $lookup 配合 $expr 实现多字段关联、子查询等复杂逻辑,而不局限于单外键相等。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏