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

MongoDB聚合$project阶段用$nin报错$in正常是什么原因?

问题原因解释
  • 核心原因是混淆了MongoDB两类操作符的适用范围:
    • $nin 属于查询操作符,仅能在find()的查询条件、聚合的$match阶段等接收查询过滤规则的场景使用,不属于聚合表达式操作符,无法直接在$filter的cond字段、算术运算等聚合表达式场景中调用,因此会触发未识别表达式的报错。
    • $in 同时支持查询场景和聚合表达式场景,所以替换后可以正常运行。
正确实现方案

如果要在聚合表达式中实现not in的筛选逻辑,只需要用$not操作符包裹$in的判断结果即可,修改后的代码如下:

$project: {
    "TransactionMonth": 1,
    "allFields": {
        "$filter": {
            "input": "$allFields",
            "as": "allFields",
            "cond": {
                "$not": { "$in": [ "$$allFields.CustomerType", ["A", "B", "C"] ] }
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:39:01