使用parse.com使用多个OR进行查询

Query with multiple OR using parse.com

本文关键字:OR 查询 parse com 使用      更新时间:2023-09-26

我当前的项目使用Parse.com(JS(。SQL中的一件简单的事情让我对Parse.com着迷,我已经阅读了文档,但我必须说,我很难正确理解"对象"方法。

无论如何,我需要做的是对一个查询应用多个"OR"。假设我有三张桌子:

 UserObject(uid, username, password)
 ResponseObject(rid, _userid, _questionid, response) // not used here
 QuestionObject(qid, questionTitle, _userid)
 _userid are pointers to the User table
 _questionid is a pointer to the Question table

我首先需要从用户表中选择以"mat"开头的用户,我这样做:

var UserObject = Parse.Object.extend("UserObject");
var query = new Parse.Query(UserObject);
query. startsWith("username", "mat");'
query.find({
       success: function(results) { etc... 

在结果中,我现在有了一组我需要的用户。现在,我需要选择question表中_userid与此数组匹配的所有问题。我知道我可以使用Parse.Query.or如下:

var QuestionObject = Parse.Object.extend("QuestionObject");
var query1 = new Parse.Query(QuestionObject);
query1.equalTo("userid", results[0].get('uid'));
var query2 = new Parse.Query(QuestionObject);
query2.equalTo("userid", results[1].get('uid'));
var mainQuery = new Parse.Query.or(query1, query2);
mainQuery.find({...})

但我不知道结果有多大,如果我有50个用户,我不想使用Parse.Query.or 50次!所以我确信有一个简单的解决方案,但我被卡住了!我想直接将"结果"传递给新的查询或类似的东西!

不需要Parse.Query.or()。如果对象属性的值是某个值数组中的一个,则Parse.Query提供将匹配的containedIn()

(问题指出Question对象上的userId是一个指针。这是一个很好的选择,但名称"userId"是一个令人困惑的选择。它是id还是对象?我希望是对象,这个答案的其余部分假设是这样(。

// results is an array of Parse.User from a prior query
var QuestionObject = Parse.Object.extend("QuestionObject");
var query = new Parse.Query(QuestionObject);
query.containedIn("userid", results);
query.find(...)

更充分,有承诺。。。

var userQuery = new Parse.Query("UserObject");
userQuery.startsWith("username", "mat");
userQuery.find().then(function(userObjects) {
    var query = new Parse.Query("QuestionObject");
    query.containedIn("userid", userObjects);
    return query.find();
 }).then(function(questions) {
     // questions are Questions who's users' username begins with 'mat'
 });