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

如何使用MongoDB Aggregate实现嵌套Episode数组的分页查询并单独返回数据

解决方案:MongoDB 嵌套数组分页查询

我来帮你搞定这个嵌套episode数组的分页需求!你的核心问题是要跨多个Season文档提取所有episode数据,同时支持skip/limit分页,还要返回{episode: [...]}的格式。原来的聚合只是把每个文档的episode数组单独拎出来,但没法合并成一个统一的数据集来分页,下面给你一套完整的解决方案:

完整聚合查询代码

db.getCollection('season_copy').aggregate([
  // 1. 把每个Season文档里的episode数组拆成单个文档
  { $unwind: { path: "$episode", preserveNullAndEmptyArrays: false } },
  // 2. 【可选】如果需要筛选特定条件的剧集,在这里加$match
  // 比如只取2021年之后发布的剧集:
  // { $match: { "episode.createdOn": { $gte: ISODate("2021-01-01") } } },
  // 3. 排序(可选,按需添加,必须在skip/limit之前)
  // { $sort: { "episode.createdOn": -1 } }, // 按创建时间倒序
  // 4. 分页:跳过指定数量,再取限制条数
  { $skip: 0 }, // 替换为前端传入的skip参数
  { $limit: 2 }, // 替换为前端传入的limit参数
  // 5. 只保留episode的内容,去掉外层Season的其他字段
  { $replaceRoot: { newRoot: "$episode" } },
  // 6. 把分页后的剧集重新组合成数组,包装成要求的格式
  { $group: { _id: null, episode: { $push: "$$ROOT" } } },
  // 7. 移除多余的_id字段
  { $project: { _id: 0 } }
])

各阶段详细解释

  • $unwind阶段:这个步骤会把每个Season文档中的episode数组“展开”,数组里的每个episode都会变成一条独立的文档。preserveNullAndEmptyArrays: false可以自动过滤掉没有episode或者episode为空的Season文档,避免无效数据干扰。
  • 可选的$match阶段:如果需要根据episode的属性(比如名称、发布日期、创建者等)筛选数据,就在这里添加匹配条件,确保只处理符合要求的剧集。
  • 可选的$sort阶段:如果需要对剧集进行排序(比如按创建时间、播出日期),一定要把这个阶段放在$skip和$limit之前,否则分页结果会混乱。
  • $skip & $limit阶段:这是分页的核心,$skip跳过前面指定数量的剧集,$limit限制返回的最大条数,直接替换成前端传入的参数值即可。
  • $replaceRoot阶段:把每个文档的根节点替换成episode的内容,这样我们就只保留了剧集的所有数据,去掉了原来Season文档的其他冗余字段(比如seriesId、season名称等)。
  • $group阶段:通过_id: null把所有分页后的剧集文档聚合到一起,用$push把它们组成一个数组,形成{_id: null, episode: [...]}的结构。
  • $project阶段:移除不需要的_id字段,最终得到完全符合前端要求的{episode: [...]}格式。

补充:获取总剧集数(用于计算总页数)

如果前端需要总页数信息,你可以单独跑一个聚合查询来统计符合条件的总剧集数:

db.getCollection('season_copy').aggregate([
  { $unwind: { path: "$episode", preserveNullAndEmptyArrays: false } },
  // 这里要和上面查询用一样的$match条件(如果有的话)
  // { $match: { "episode.createdOn": { $gte: ISODate("2021-01-01") } } },
  { $count: "totalEpisodes" }
])

这个查询会返回{totalEpisodes: 数字},前端可以用这个数除以每页条数,得到总页数。

内容的提问来源于stack exchange,提问作者Ragu M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:22:33