我正在尝试执行“$或”搜索以匹配两个正则表达式,如下所示:
{
"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.
为什么$或被检测为未知运营商?
答案 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> } }