You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB关联User与Order集合 基于订单ID数组获取对应订单数据

MongoDB 关联填充嵌套数组字段解决方案

你可以通过MongoDB聚合管道实现需求,完整查询语句如下:

db.User.aggregate([
  // 关联Order集合拉取用户对应的所有订单数据
  {
    $lookup: {
      from: "Order",
      localField: "OrderIds.oId",
      foreignField: "orderId",
      as: "tempOrderList"
    }
  },
  // 匹配订单名称填充到原OrderIds数组的对应项中
  {
    $addFields: {
      OrderIds: {
        $map: {
          input: "$OrderIds",
          as: "originItem",
          in: {
            oId: "$$originItem.oId",
            oName: {
              $getField: {
                input: {
                  $first: {
                    $filter: {
                      input: "$tempOrderList",
                      cond: { $eq: ["$$this.orderId", "$$originItem.oId"] }
                    }
                  }
                },
                field: "orderName"
              }
            }
          }
        }
      }
    }
  },
  // 移除临时生成的中间字段
  {
    $project: {
      tempOrderList: 0
    }
  }
])

注意事项

  • 如果你的MongoDB版本低于5.0不支持$getField语法,可以将oName的赋值逻辑替换为如下兼容写法:
oName: {
  $let: {
    vars: {
      matched: {
        $first: {
          $filter: {
            input: "$tempOrderList",
            cond: { $eq: ["$$this.orderId", "$$originItem.oId"] }
          }
        }
      }
    },
    in: "$$matched.orderName"
  }
}
  • 请确认$lookup阶段的from字段值和你实际的Order集合命名保持一致。

内容的提问来源于stack exchange,提问作者Lineesh Mb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:39:04