首页/数据/NoSQL 速查/$lookup 管道式关联
本包目录(322 条)
MongoDB99 条
Elasticsearch89 条ClickHouse56 条时序与列式28 条选型与架构50 条

$lookup 管道式关联

进阶写法用 let + pipeline 在关联侧再做过滤、排序与截断,适合“每个主文档只关联少量子文档”的场景。

NoSQL 速查数据更新于 2026-10-12
写法{ $lookup: { from, let, pipeline: [...], as } }
引用变量pipeline 内用 $$变量名 引用 let 定义的字段
好处关联侧先过滤再返回,减少结果膨胀

每单带最近一条物流

每单带最近一条物流
db.orders.aggregate([
  { $lookup: {
      from: "shipments",
      let: { orderNo: "$orderNo" },
      pipeline: [
        { $match: { $expr: { $eq: ["$orderNo", "$$orderNo"] } } },
        { $sort: { ts: -1 } },
        { $limit: 1 }
      ],
      as: "latestShipment"
  } }
])
pipeline 形式内部条件常用 $expr 表达,写法更灵活但优化器能力也有限,先在测试环境验证。

易错点

  • $$变量名拼写错误不会报出具体字段,会静默返回空数组,排查时先看关联侧数据

数据来源与参考

  • MongoDB Manual: $lookup with pipeline
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌