MongoDB 6.0中$filter聚合阶段未被识别,请求排查解决
问题原因及解决办法
核心问题
$filter是MongoDB聚合表达式,不是独立的管道阶段,你直接把它作为管道阶段传入aggregate(),所以触发"Unrecognized pipeline stage name"错误。
修正方案
将$filter嵌套在$project、$addFields这类支持字段计算的管道阶段中使用,同时修正NumberLong的参数格式解决警告:
rs0 [primary] test> db.users.aggregate([ { $project: { filteredNumbers: { $filter: { input: [1, "a", 2, null, 3.1, NumberLong("4"), "5"], as: "num", cond: { $and: [ { $gte: ["$$num", NumberLong("-9223372036854775807")] }, { $lte: ["$$num", NumberLong("9223372036854775807")] } ] } } } } } ])
额外说明
$filter的作用是筛选数组元素,必须在字段定义的上下文中使用(比如$project里生成新字段),不能单独作为管道步骤。- 关于
NumberLong的警告:按照提示传入字符串参数而非数字,避免大整数场景下的精度丢失问题。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

