MongoDB聚合查询:关联用户与店铺集合并生成店铺对象数组
MongoDB关联User与Store集合,将store_ids转换为带name的店铺数组
要实现将User集合中store_ids数组关联到Store集合并返回对应店铺名称的需求,核心是使用MongoDB聚合框架的$lookup操作(MongoDB 3.2及以上版本支持)。之前单独用$map或$set无法实现,是因为这两个操作只能处理当前集合内的字段,没法直接访问另一个集合的数据。
完整聚合查询代码
db.User.aggregate([ // 第一步:关联Store集合,根据store_ids匹配店铺的_id { $lookup: { from: "Store", // 要关联的目标集合名 localField: "store_ids", // User集合中用于关联的字段(数组) foreignField: "_id", // Store集合中匹配的字段 as: "stores" // 关联结果存储的字段名 } }, // 第二步:筛选stores数组中需要的字段(只保留_id和name) { $project: { _id: 1, stores: { $map: { input: "$stores", as: "store", in: { _id: "$$store._id", name: "$$store.name" } } } } } ])
代码说明
- $lookup阶段:自动遍历User集合中每个文档的
store_ids数组,匹配Store集合中_id对应的文档,把匹配到的所有店铺文档存入stores字段。 - $project阶段:用
$map遍历stores数组,只保留每个店铺文档的_id和name字段,输出你期望的结果结构。
注意事项
你期望的结果中第二个店铺的键是id,这应该是笔误,上述代码返回的是标准的_id键,和MongoDB文档结构保持一致。
内容的提问来源于stack exchange,提问作者Gustavo Farias
相关产品推荐
相关产品推荐

