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

MongoDB查询求助:筛选Action/Adventure类电影仅返回标题

问题排查与解决方案

原代码的核心问题

  1. 语法严重错误:存在大量括号不匹配问题,多个$or语句未正确闭合;同时{ genre: $eq:"Adventure"}的写法错误,$eq必须包裹在对象中,正确格式应为{ genre: { $eq: "Adventure" } }。
  2. 逻辑完全偏离需求:你需要筛选genre为Action或Adventure的电影,但原代码错误地嵌套了一堆针对特定title的$or条件,完全背离了按类型筛选的目标。
  3. 混淆查询条件与投影规则:{ title: 1 }是投影参数(用于指定返回字段),不应放在查询条件的对象中,它是find()方法的第二个参数。
  4. 冗余的$and使用:MongoDB默认对多个查询条件执行逻辑与操作,这里仅需单一的类型筛选条件,完全不需要显式声明$and。

可行的正确查询方案

方案1:使用$or实现类型筛选

db.movies.find(
  // 查询条件:genre是Action或Adventure
  {
    $or: [
      { genre: "Action" },
      { genre: "Adventure" }
    ]
  },
  // 投影:仅返回title字段,排除默认的_id
  { title: 1, _id: 0 }
)

注:{ genre: "Action" }是{ genre: { $eq: "Action" } }的简写,MongoDB支持这种简洁写法。

方案2:使用$in更高效实现(推荐)

当筛选同一字段的多个可选值时,$in比$or更简洁且性能更优:

db.movies.find(
  { genre: { $in: ["Action", "Adventure"] } },
  { title: 1, _id: 0 }
)

补充说明

  • 如果你的genre字段是数组类型(比如一部电影属于多个类型),上述查询依然有效,MongoDB会自动匹配数组中包含目标值的文档。
  • 投影参数中_id: 0是可选的,但如果不需要返回默认的_id字段,建议显式排除,避免结果冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:45:35