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

如何使用Mongoose查询数组内同时满足双条件的对象文档?

问题修正方案

你的问题出在MongoDB对数组字段的默认查询逻辑上:当你同时指定"equipment.name": "kiosk"和"equipment.count": 3时,MongoDB会认为只要数组里存在任意一个元素的name是kiosk,并且存在任意一个元素(可以是另一个)的count是3,就会返回该文档,而不是要求同一个equipment对象同时满足两个条件。

要实现“数组中某个equipment对象同时具备name为kiosk且count为3”的查询,需要使用$elemMatch操作符,它专门用于指定数组元素必须同时匹配多个查询条件。

修正后的代码如下:

if (equipment && equipment !== "All") {
  const projects = await Project.find({
    equipment: {
      $elemMatch: {
        name: "kiosk",
        count: 3
      }
    }
  });
  res.status(StatusCodes.OK).json({ projects });
  
  return;
}

补充说明

  • $elemMatch会告诉MongoDB:在equipment数组中,必须存在至少一个元素,同时满足name: "kiosk"和count: 3这两个条件。
  • 你原来代码里的$and是多余的,因为MongoDB默认对多个查询条件就是逻辑与的关系,且这里的问题核心是数组元素的匹配逻辑,而非多条件的逻辑组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:49:51