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

Mongoose如何从查询结果的嵌套数组中筛选符合条件的单个对象

实现方案

方案1:数据库层面过滤(推荐)

不需要修改find的查询条件,使用MongoDB聚合框架的$filter操作符在返回阶段过滤每个文档的translations数组,不影响全量集合的文档返回数量,仅裁剪数组内容,性能更优。
代码示例:

await model.aggregate([
  // 无$match阶段,和find({})等价,返回全量集合文档
  {
    $project: {
      translations: {
        $filter: {
          input: "$translations",
          as: "item",
          cond: { $eq: ["$$item.name", "EN"] }
        }
      }
    }
  }
]).then((data: any) => {
  return res.status(200).json({ data });
});

方案2:应用层代码过滤

如果不能调整查询逻辑,直接在拿到返回结果后遍历处理即可:
代码示例:

await model
  .find({})
  .select("translations")
  .then((data: any) => {
    const processedData = data.map(doc => {
      return {
        ...doc._doc,
        translations: doc.translations.filter(translation => translation.name === 'EN')
      };
    });
    return res.status(200).json({ data: processedData });
  });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:15:03