MongoDB聚合$match多条件查询报错:意外令牌/未知阶段名称
修复MongoDB聚合查询的「意外阶段名称」/「意外令牌」错误
错误原因分析
你的聚合查询代码存在两个关键问题:
- $match阶段的条件结构错误:你把
year的查询条件写成了和genre条件同级的独立对象,导致MongoDB误将{year:...}识别为一个新的聚合阶段,从而抛出「unrecognized pipeline stage name: year」错误。 - $gt条件的语法错误:
year:{$gt:["$year",2005]}是错误写法,$gt操作符只需传入目标比较值(这里是2005),不需要数组格式,也不需要引用$year字段(直接比较数值即可)。
正确的聚合查询代码
db.movies.aggregate([ { $match: { genre: { $all: ['Comedy', 'Drama'] }, year: { $gt: 2005 } } } ])
代码说明
$match阶段内的所有查询条件都要放在同一个对象中,genre和year是该对象下的两个键,这样MongoDB才会正确解析为单一的匹配条件。year: { $gt: 2005 }直接筛选出上映年份大于2005的电影,符合你的需求。
内容的提问来源于stack exchange,提问作者siddxx18
相关产品推荐
相关产品推荐

