Node.js 在mongoose中高效地编写复杂的if条件
我在我的节点应用程序上有一组条件 当我试图实施以下if块时-Node.js 在mongoose中高效地编写复杂的if条件,node.js,mongoose,node-mongodb-native,Node.js,Mongoose,Node Mongodb Native,我在我的节点应用程序上有一组条件 当我试图实施以下if块时- if(((public==true)&&(varA=="something" || varB == "something")) || (public==false)&&(varA=="something" || varB == "something")&&(varc == "something")) 所以我试图实现的是- db.foo.find({"$or":[{"$and":[{e:
if(((public==true)&&(varA=="something" || varB == "something")) || (public==false)&&(varA=="something" || varB == "something")&&(varc == "something"))
所以我试图实现的是-
db.foo.find({"$or":[{"$and":[{e:true},{"$or":[{d:"four"},{c:"seven"}]}]},{"$and":[{e:false},{a:"one"},{"$or":[{c:"three"},{c:"seven"}]}]}]})
现在,变量varA、varB、varC是动态的,因此它们取决于用户的请求。因此,我无法按原样编写查询对象。我将不得不以数组的方式编写它
( like obj["$or][0]["$and"][e] = true; )
或者类似的东西
我可以在这里简化我的查询吗?或者有没有更好更有效的方法来获取所需的集合。首先,让我们检查一下布尔条件。它有助于使用缩进将其写在多行上。把它写在一行上几乎让人无法理解
(public==true && (varA=="something" || varB == "something"))
||
(public==false)
&&
(varA=="something" || varB == "something")
&&
(varc == "something")
让我们简化一下。让P
成为public==true
,让A
,B
,C
成为明显的条件。我不确定是否所有的“某物”
都是不同的值或相同的值,所以我假设对于固定值*,var*
条件使用相同的“某物”
。那么情况是
(P && (A || B))
||
~P
&&
(A || B)
&&
C
这有点愚蠢,所以让我们试着进一步简化。最简单的方法是使用符号+
表示或|
和*
表示和&&
,因为布尔代数的规则与+
和*
的规则类似。不是~
。我也将开始对*
使用并置
(P * (A + B)) + ~P * (A + B) * C =
PA + PB + (~P)AC + (~P)BC =
A(P + (~P)C) + B(P + (~P)C)
嗯。让我们考虑一下这种情况。显然,我们需要A
和B
中的一个为真。那么我们需要P+(~P)C
才能为真。在条件中检查~P
是没有意义的,因为如果P
为真,我们就赢了,否则我们需要C
,因此我们可以将条件简化为
A(P + C) + B(P + C)
作为查询对象,如下所示
{
"$or" : [
{
varA : "something",
"$or" : [
{ "public" : true },
{ varC : "something" }
]
},
{
varB : "something",
"$or" : [
{ "public" : true },
{ varC : "something" }
]
},
]
}
我将用Javascript创建此对象,如下所示:
var myQuery = {
"$or" : [
{
"$or" : [
{ "public" : true },
{ }
]
},
{
"$or" : [
{ "public" : true },
{ }
]
},
]
};
myQuery["$or"][0][varA] = "something";
myQuery["$or"][1][varB] = "something";
myQuery["$or"][0]["$or"][1][varC] = "something";
myQuery["$or"][1]["$or"][1][varC] = "something";
如果您和任何其他慷慨的读者能够检查一下,我将不胜感激,因为显然,在推理和符号操作中存在许多错误的机会