为什么我的MongoDB $或查询不起作用?

时间:2017-12-28 21:55:17

标签: mongodb

我正在尝试执行“$或”搜索以匹配两个正则表达式,如下所示:

{
    "metadata.text": {
        "$or": [
            {
                "$regex": ".*hello.*"
            },
            {
                "$regex": ".*world.*"
            }
        ]
    }
}

我正在使用mlab.com并收到以下错误:

MongoDB error: "Command failed with error 2: 'unknown operator: $or' on server ZZZZZZZ. The full response is { "ok" : 0.0, "errmsg" : "unknown operator: $or", "code" : 2, "codeName" : "BadValue" }." Please contact support@mlab.com if you need assistance.

为什么$或被检测为未知运营商?

2 个答案:

答案 0 :(得分:7)

只是因为$或者应该是查询中的顶级运算符,如下所示:

db.collection.find({
        "$or": [
            {
                "metadata.text": { "$regex": ".*hello.*" }
            },
            {
                "metadata.text": { "$regex": ".*world.*" }
            }
        ]
})

答案 1 :(得分:0)

简短的回答是 $or 语句不适用于单个字段,而是必须为每个项目指定字段:

{
  $or: [
    {"metadata.text": {"$regex": ".*hello.*"}},
    {"metadata.text": {"$regex": ".*world.*"}}
  ]
}

说明

对于 the manual$or 语法如下:

<块引用>
{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }

请注意,与许多运算符不同,它不包含字段名称。例如,对比 $exists,它确实包含字段名称:

<块引用>
{ field: { $exists: <boolean> } }