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

Mongoose聚合查询添加Base字段过滤后返回0结果问题

Mongoose聚合查询过滤无结果的问题解决

问题原因

你在聚合管道末尾添加的$match条件引用了userData.base,但经过前面的$group和$project阶段后,userData字段已经不存在了——$group阶段已经把userData.base提取成了顶级字段base,所以这个匹配条件找不到对应字段,自然返回0条结果。

修复方案

方案1:修正末尾的$match字段

把匹配的字段从"userData.base"改成"base",代码修改如下:

if (base) {
    aggregationPipeline.push({ $match: { base: { $eq: base } } });
}

方案2:提前过滤(性能更优)

为了提升查询效率,建议把base的过滤步骤放在$unwind之后、$group之前,这样可以提前过滤掉不符合条件的数据,减少后续分组处理的数据量:

const aggregationPipeline = [
    { $match: { endDate: { $gte: startDate }, display: true } },
    { $lookup: { from: "users", localField: "user", foreignField: "_id", as: "userData" } },
    { $unwind: "$userData" },
    // 提前添加base过滤逻辑
    ...(base ? [{ $match: { "userData.base": { $eq: base } } }] : []),
    {
        $group: {
            _id: "$userData.crewCode",
            base: { $first: "$userData.base" },
            rank: { $first: "$userData.rank" },
            rosters: { $push: "$rawData" }
        }
    },
    { $project: { _id: 1, base: 1, rank: 1, rosters: 1 } },
    { $sort: { rank: 1, _id: 1 } }
];

// 移除末尾的match逻辑

补充说明

聚合管道按顺序执行,每个阶段的输出会作为下一个阶段的输入,所以必须时刻关注每个阶段后的数据结构变化;提前过滤能有效降低后续阶段的数据处理压力,在数据量较大的场景下性能提升尤为明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:47:38