在MongoDB表达式中使用$ exists

时间:2018-07-12 17:13:03

标签: mongodb mongodb-query

对于背景,如果要比较两个字段,则不能使用以下语法(因为它与文字字符串“ $ lastName”而不是$ lastName字段的内容进行比较):

"$match": { "firstName": { $ne : "$lastName"} }

我必须使用这个:

"$match": { "$expr": { $ne : [ "$firstName", "$lastName" ] } }

如果要测试字段是否存在,必须使用第一种格式:

"$match": { "fullName": { "$exists": true } }

我认为以后一种格式表示$ exists运算符的正确方法会引发错误:

db.docs.aggregate([
  {
    "$match": { "$expr": { "$exists": [ "$fullName", true ] } }
  }
])
assert: command failed: {
        "ok" : 0,
        "errmsg" : "Unrecognized expression '$exists'",
        "code" : 168,
        "codeName" : "InvalidPipelineOperator"
} : aggregate failed

这是否意味着至少在某些情况下无法合并这些操作?具体来说,假设我想在 $ fullName $存在 OR $ firstName $ ne $ lastName的地方找到文档。可以表达出来吗?

1 个答案:

答案 0 :(得分:5)

您将需要使用$or逻辑运算符来完成此操作。

{
   "$or": [
      {
         "$expr": {
            "$ne": [
               "$firstName",
               "$lastName"
            ]
         }
      },
      {
         "fullName": {
            "$exists": true
         }
      }
   ]
}

您上次查询失败,因为mongod认为$exists是您要传递的$expr运算符。