如何使用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
相关产品推荐
相关产品推荐

