Parse platform 解析Javascript SDK查询:使用AND组合两个查询

Parse platform 解析Javascript SDK查询:使用AND组合两个查询,parse-platform,Parse Platform,我有一个名为Event的类,它有一个日期类型的end\u time列和一个字符串类型的title。我想获取end\u time列未定义或大于或等于new Date()的事件。这并不困难,因为可以使用以下代码完成: var query1 = new Parse.Query(Event); var query2 = new Parse.Query(Event); query1.doesNotExist("end_time"); query2.greaterThanOrEqualTo("end_tim

我有一个名为
Event
的类,它有一个日期类型的
end\u time
列和一个字符串类型的
title
。我想获取
end\u time
列未定义或大于或等于
new Date()
的事件。这并不困难,因为可以使用以下代码完成:

var query1 = new Parse.Query(Event);
var query2 = new Parse.Query(Event);
query1.doesNotExist("end_time");
query2.greaterThanOrEqualTo("end_time", new Date());

var query1And2 = Parse.Query.or(query1, query2);
query1和query2
可以正确返回我想要的结果。但是,问题是如果我再添加一个约束,比如:给定用户指定的标题,返回标题未定义或等于用户指定标题的事件。该约束本身并不难构造,例如:

var query3 = new Parse.Query(Event);
var query4 = new Parse.Query(Event);
query3.doesNotExist("title");
query4.equalTo("title", userTitle);

var query3And4 = Parse.Query.or(query3, query4);

但是,如何同时使用
查询1和查询2以及
查询3和查询4来查询
事件

这些约束可以通过一点布尔数学来实现。看起来您已经了解到,parse允许您通过将多个查询与
query.or()
**组合来指定单个查询上的连接(and)约束和析取(or)约束。因此,为了获得您想要的约束,我们需要将查询逻辑转换为非并列形式

您的单个谓词是:

A = doesNotExist("end_time")
B = greaterThanOrEqualTo("end_time", new Date())
C = doesNotExist("title")
D = equalTo("title", userTitle)
我们希望提出以下问题:

(A or B) and (C or D)
用代数将和的乘积重写为乘积的和,我们得到:

= (A and C) or (B and C) or (A and D) or (B and D)
=    q0     or    q1     or    q2     or    q3
其中q0..q3是受ANDed约束的查询。将它们呈现为代码:

var q0 = new Parse.Query(Event);
q0.doesNotExist("end_time");
q0.doesNotExist("title");

var q1 = new Parse.Query(Event);
q1.greaterThanOrEqualTo("end_time", new Date());
q1.doesNotExist("title");

var q2 = new Parse.Query(Event);
q2.doesNotExist("end_time");
q2.equalTo("title", userTitle);

var q3 = new Parse.Query(Event);
q3.greaterThanOrEqualTo("end_time", new Date());
q3.equalTo("title", userTitle);

var querySum = Parse.Query.or(q0, q1, q2, q3);
**Query.or()可能只是像Promise.when()那样单独运行这些查询,并组合结果,但让我们假设parse在这方面比我们在应用程序级别做得更好