MongoDB中$project阶段$filter用对象表达式报错问题咨询
问题解答
报错是否符合预期?
是的,这个报错完全符合预期。你的$filter阶段中cond字段的写法不符合MongoDB聚合表达式的语法规范:
cond要求接收一个布尔表达式,必须用MongoDB提供的聚合操作符(如$eq、$gt等)构建判断逻辑- 直接写成
{"$$tar.name": "ally"}这种键值对形式,MongoDB无法识别这是合法表达式,因此抛出"Unrecognized expression"错误
正确实现方式
要筛选出tar数组中name等于"ally"的元素,需在cond中使用$eq比较操作符构建条件,完整代码如下:
$project: { tar: { $filter: { input: "$tar", cond: { $eq: ["$$tar.name", "ally"] }, as: "tar" } } }
补充说明
$$tar是$filter中as参数定义的迭代变量,代表数组中的每一个元素$eq操作符会对比第一个参数($$tar.name)和第二个参数("ally")是否相等,返回布尔值决定当前元素是否被保留
内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture
相关产品推荐
相关产品推荐

