解析云JavaScript中的复合查询

时间:2015-11-02 20:13:31

标签: javascript mongodb parse-platform

我尝试使用OR和AND操作来执行具有多个约束的Parse.Query。例如,这样的操作:

(x1>2 OR x2<5) && (x3 equalTo 4) && (x4>7 OR x5<8)

x1x2x3变量代表特定字段的查询约束。我知道我可以使用两个不同的查询作为参数来执行Parse.Query.or,然后执行AND操作,为结果添加其他约束,如下所示:

var lotsOfWins = new Parse.Query("Player");
lotsOfWins.greaterThan(150);

var fewWins = new Parse.Query("Player");
fewWins.lessThan(5);

var mainQuery = Parse.Query.or(lotsOfWins, fewWins);

但如果我有多个&#34; OR&#34;我怎么能进行之前描述的操作呢?操作?有没有办法直接在MongoDB中制作约束?

2 个答案:

答案 0 :(得分:0)

根据the API documentation,您可以将任意数量的参数传递给Parse.Query.or

答案 1 :(得分:0)

我们希望以析取形式进行查询,所以:

(x1>2 OR x2<5) && (x3 equalTo 4) && (x4>7 OR x5<8)

可以重申为:

(A || B) && E && (C || D)

然后通过将CNF转换为DNF(cool tool by wolfram.alpha here

进行重述
(A && C && E) || (A && D && E) || (B && C && E) || (B && D && E)

然后重新作为查询:

var q0=new Parse.Query("Player");
q0.greaterThan("x1", 2);
q0.greaterThan("x4", 7);
q0.equalTo("x3", 4);

var q1=new Parse.Query("Player");
q1.greaterThan("x1", 2);
q1.lessThan("x5", 8);
q1.equalTo("x3", 4);

var q2=new Parse.Query("Player");
q2.lessThan("x2", 5);
q2.greaterThan("x4", 7);
q2.equalTo("x3", 4);

var q3=new Parse.Query("Player");
q3.lessThan("x2", 5);
q3.lessThan("x5", 8);
q3.equalTo("x3", 4);

// notice the square braces.  the param to or is an array
var mainQuery = Parse.Query.or([q0, q1, q2, q3]);