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
相关产品推荐
相关产品推荐

