提问人:Owen S 提问时间:11/22/2022 最后编辑:Owen S 更新时间:11/22/2022 访问量:18
在MongoDB中使用布尔逻辑时,是否有(唯一)解决方法可以解决重复的“$or”键?
Could there be a (unique) workaround for duplicate "$or" keys when working with boolean logic in MongoDB?
问:
当我之前问一个关于MongoDB查询的问题时,解决了相应的问题,但另一个问题源于最初的想法。
在类似条件下,假设我正在尝试查询:
Example: {
"AttributeA": type,
"AttributeB": type,
"AttributeC": type,
"AttributeD": type
etc...
}
但是我想找到给定条件的所有元素:
(属性 A 与 criteria1 匹配或属性 B 与 criteria2 匹配) 和 (属性 C 与 criteria3 匹配,属性 D 与 criteria4 匹配,或者属性 E 与 criteria5 匹配)
$in运算符仅跟踪$or条件,前提是属性相同(例如,参考前面的 AttributeC 匹配条件 3、4 或 5 的问题)。因此,此新查询中的总体布局将更像:
db.Example.find({
$or:[ {AttrA : "criteria1"}, {AttrB : "criteria2"}],
$or:[ {AttrC : "criteria3"}, {AttrD : "criteria4"}, {AttrE : "criteria5"} ]
})
但是在上述条件下,如果没有重复的“$or”运算符似乎是不可能的,除非我做一些布尔代数并将其分离为:
((A+B)*(C+D+E) = AC + AD + AE + BC + BD + BE) 又名 AttrA 匹配 ...和 AttrC 匹配...... 或 AttrA 匹配 ...和 AttrD 匹配...... 或 ... AttrB 匹配 ...和 AttrE 匹配......
这意味着格式将如下所示
db.Example.find({
$or:[
$and:[{AttrA : "criteria1"}, {AttrC : "criteria3"}],
$and:[{AttrA : "criteria1"}, {AttrD : "criteria4"}],
...,
$and:[{AttrB : "criteria2"}, {AttrE : "criteria5"}
]
})
虽然我什至不确定mongoDB系统是否允许重复的“$and”。 有没有更简单的方法,或者我是否使条件查询过于复杂?
答:
0赞
user20042973
11/22/2022
#1
无需在此处手动分发条件。您必须在隐式上使用 显式而不是隐含:$and
db.Example.find({
$and: [
{ $or:[ {AttrA : "criteria1"}, {AttrB : "criteria2"}] },
{ $or:[ {AttrC : "criteria3"}, {AttrD : "criteria4"}, {AttrE : "criteria5"} ] }
]
})
此处的 Playground 示例。此处的文档中对此进行了介绍。
遇到的一般问题,至少在包含 shell 的 Javascript 中是这样,是不支持重复的字段名称。请考虑以下示例,直接使用 Node:
$ node
Welcome to Node.js v16.17.0.
Type ".help" for more information.
> let x = { x: 123, y: 456, x: 789 }
undefined
> x
{ x: 789, y: 456 }
>
评论