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

Mongoose聚合:如何基于tutorInfo获取不重复数据

解决MongoDB聚合结果中导师信息重复的问题

要获取tutorInfo不重复的唯一文档列表,需要调整聚合管道的执行顺序,先对导师信息去重,再进行分页和关联查询。修改后的聚合逻辑如下:

const allQuestionBySubject = await QuestionParts.aggregate([
    // 筛选指定学科且存在导师信息的文档
    {
        $match: {
            subject: subjectIncrementalId,
            tutorInfo: { $exists: true }
        }
    },
    // 按导师增量ID分组去重,保留每组第一个完整文档
    {
        $group: {
            _id: "$tutorInfo.tutorIncrementalId",
            doc: { $first: "$$ROOT" }
        }
    },
    // 将分组后保留的文档还原为根结构
    {
        $replaceRoot: { newRoot: "$doc" }
    },
    // 对去重后的导师列表执行分页
    { "$skip": page * limit },
    { "$limit": limit },
    // 关联profiles集合获取导师详情
    {
        $lookup: {
            from: "profiles",
            localField: "tutorInfo.tutorIncrementalId",
            foreignField: "incrementalId",
            as: "tutorDetails"
        }
    }
])

关键逻辑说明:

  • $group去重:通过tutorInfo.tutorIncrementalId作为分组依据,用$first保留每组的第一个文档,确保每个导师仅对应一条QuestionParts记录。
  • 调整分页顺序:将$skip和$limit移至去重之后,保证分页是针对去重后的唯一导师列表进行,避免原逻辑中先分页再去重导致的结果遗漏。
  • $replaceRoot还原结构:把分组后存在doc字段中的原文档还原为根节点,保持最终结果的结构与原查询一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:55:17