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

MongoDB关联查询:每个父类别取10条视频ID合并为单数组

解决方案

可以通过MongoDB聚合管道一次性完成集合关联、分组、取前10个video_id并输出单个数组的需求,无需用forEach循环拆分输出。以下是优化后的查询:

db.vid_v2.aggregate([
  // 过滤存在有效parent_category的视频文档
  {
    $match: {
      parent_category: { $exists: true, $ne: null }
    }
  },
  // 关联category集合,获取对应的分类名称
  {
    $lookup: {
      from: "category", // 关联的category集合名称
      localField: "parent_category", // video集合中用于关联的字段
      foreignField: "_id", // category集合中匹配的主键字段(若分类用其他字段匹配需调整)
      as: "category_info"
    }
  },
  // 展开关联返回的分类信息数组(每个视频对应一个分类,展开后取单条数据)
  {
    $unwind: "$category_info"
  },
  // 按父分类分组,收集该分类下所有video_id并保留分类名称
  {
    $group: {
      _id: "$parent_category",
      category_name: { $first: "$category_info.category_name" }, // 同一分类名称唯一,取第一个即可
      video_ids: { $push: "$video_id" } // 收集当前分类下所有视频ID
    }
  },
  // 对收集到的video_id数组截取前10个
  {
    $addFields: {
      top_10_video_ids: { $slice: ["$video_ids", 10] },
      parent_category: "$_id" // 将_id重命名为parent_category,字段更直观
    }
  },
  // 整理输出字段,去掉冗余的_id和完整video_ids数组
  {
    $project: {
      _id: 0,
      video_ids: 0
    }
  }
])

关键逻辑说明:

  • $lookup:完成video与category集合的关联,根据parent_category匹配分类主键,拉取对应的category_name。
  • $unwind:将$lookup返回的数组型分类信息展开为单条文档,方便后续分组提取分类名称。
  • $group:按父分类维度聚合,用$push收集该分类下所有video_id,用$first固定分类名称(同一分类下名称唯一)。
  • $slice:对收集到的video_id数组截取前10个,得到每个分类的top10视频ID。
  • 最终输出为单个数组,每个元素包含parent_category、category_name和top_10_video_ids三个字段,完全匹配需求。

内容的提问来源于stack exchange,提问作者Vinayak Mishra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:45:37