parse-platform - 解析 Javascript SDK 查询 : Combining two queries using AND

标签 parse-platform

我有一个名为 Event 的类,它有一个名为 end_time 的 Date 类型的列和一个名为 title 的 String 类型的列。我想获取 end_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);

query1And2 可以正确返回我想要的结果。但是,问题是如果我再添加一个约束,例如:给定用户指定的标题,返回标题未定义或等于用户指定标题的事件。这个约束本身并不难构造,例如:

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);

但是,如何使用 query1And2query3And4 查询 Event

最佳答案

这些约束可以通过一些 bool 数学来实现。看起来您已经了解 parse 允许您通过将多个查询与 Query.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 在这方面比我们在应用程序级别做得更好。

关于parse-platform - 解析 Javascript SDK 查询 : Combining two queries using AND,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28738268/

相关文章:

swift - iOS 解析 - 架构 i386 的 undefined symbol - iPhone 4s、iPhone 5

android - 将 ParseObject 中的特定值用于新查询

android - Parse 服务是否需要 Google 帐户?

swift - Back4app - Swift - 将 PFObject 转换为类

ios - 解析 PFQuery whereKey :notEqualTo is not working for PFUser objects

ios - 将 PFQuery 解析为数组 objective-c

ios - (Xcode) 解析。如何在不使用 PFQueryTableViewController 的情况下删除表中的行

javascript - 在 livequery 中初始化用户类

javascript - 解析查询错误 - 400 : Bad request upon data insertion

ios - 使用来自 Parse.com PFQueryTableViewController 的 editActionsForRowAtIndexPath 提取行数据