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

Mongoose查询字符串数组匹配异常:分类筛选条件不生效问题排查

问题根因
  • 你当前的Schema定义中不存在顶级categories字段,分类字段是嵌套在source.rssFeeds数组的每个子项中,你写的categories: category_slug查询条件指向的是不存在的字段,MongoDB会默认忽略不存在字段的筛选条件,因此只剩下来源筛选规则生效。
  • 你当前使用findOne方法只能返回单条匹配数据,不符合你查询「所有符合条件文章」的需求。
修复方案

如果你的需求是:筛选出来源slug匹配filter、且该来源的rssFeeds数组中至少有1个条目的categories数组包含传入的category_slug的所有文章,修改查询逻辑如下:

let getNews = async (req, res) => {
    const { sort, filter, current_page, limit, category_slug } = req.body;
    
    // 替换findOne为find,修改分类筛选的字段路径,使用$elemMatch匹配嵌套数组条件
    let articles = await Article.find({ 
        'source.name_slug': filter, 
        'source.rssFeeds': {
            $elemMatch: {
                categories: category_slug
            }
        }
    });

    res.setHeader('Content-Type', 'application/json');
    res.status(200).send({ articles });
}
补充说明

如果你的业务需求中「文章分类」是文章本身的属性,不是来源rssFeed的属性,你需要先在Schema的顶级字段中新增categories: { type: [String], required: true }定义,之后原来的categories: category_slug筛选条件才会生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:36:00