我写了一个包含OR运算符的Mongo搜索查询。其布尔表达式如下。
A和(B或C) 对于表达式的上述布局,如果 B 或 C 之一为假,则它将返回false。因此,我的查询失败。更具体的Mongo查询如下。
{ "fieldName" : { "regex" : "AB.*" },
"$and" : [[{"fieldName2" : "$in" : ["abc", "cds"]},
"$or" : [{"fieldName3" : "$in" : ["abc", "cds"]}]]
}
在上述查询中,如果fieldName2
具有abc
之一,或者cds
但fieldName3
没有任何一个,则查询返回false,尽管它位于 OR 子句。
那么还有其他方法可以实现该搜索查询,如上述表达式中所述,或者我在这里做错了什么。 ?
答案 0 :(得分:2)
$and
和$or
将布尔运算应用于其数组值的内容。因此,您的查询应重写为:
{
"fieldName" : { "regex" : "AB.*" },
"$or": [{"fieldName2" : "$in" : ["abc", "cds"]},
{"fieldName3" : "$in" : ["abc", "cds"]}]
}
请注意,您甚至不需要在这里使用$and
,因为多个查询项都是隐式AND运算的。