为什么在Mongo管道匹配项中不能使用$ nin,$ exists等?

时间:2018-11-27 16:53:27

标签: node.js mongodb aggregation-framework

我一直在寻找这个答案的高低,但没有任何效果。我有一个带有匹配项的管道查询,如下所示:

$match: {
  $expr: {
    $and: [
      ....
    ]
  }
}

在$内,我使用$ eq,$ in,$ ne,$ gt,$ lt等各种条件。

但是,我可能无法尝试识别$ nin或$ exists。我想在搜索不存在的键的地方添加一个术语,例如:

{ $exists: [ '$key', 0 ] }

我不断得到

  

MongoError:无法识别的表达式'$ exists'

  

MongoError:无法识别的表达式'$ nin'

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您只能在$expr内使用aggregation运算符,而$nin$exists是查询运算符,而不是aggregation。在$expr表达式之外使用上述条件。

类似

{ "$match": {
  "key": { "$exists": true },
  "$expr": {
    "$and": [
      {...}, {...}
    ]
  }
}}