解析多个doesNotMatchKeyInQuery

时间:2015-04-05 23:12:32

标签: javascript parse-platform cloud-code

我在javascript中使用Parse查询时遇到问题。我想尝试使用多个doesNotMatchKeyInQuery函数,但它只允许使用最后一个。任何想法如何使代码像这样工作?忽略代码其他部分中可能存在的错误。我把它写成一个例子

//Query 1
var Class1 = Parse.Object.extend("Class1");
var class1Query = new Parse.Query(Class1);
class1Query.equalTo("id", id1);

//Query 2
var Class2 = Parse.Object.extend("Class2");
var class2Query = new Parse.Query(Class2);
class2Query.equalTo("id", id2);

//Query 3
var Class3 = Parse.Object.extend("Class3");
var class3Query = new Parse.Query(Class3);
class3Query.equalTo("id", id3);

//Bringing it all together
var finalQuery = new Parse.Query("User");  

//This is the part below I am talking about
finalQuery.doesNotMatchKeyInQuery("objectId", "id1", class1Query);
finalQuery.doesNotMatchKeyInQuery("objectId", "id2", class2Query); 
finalQuery.doesNotMatchKeyInQuery("objectId", "id3", class3Query); 

finalQuery.find({
    success: function (results) { 
        response.success(results);
    },
    error: function (error) {
        response.error(error);
    }
});

1 个答案:

答案 0 :(得分:-1)

无法在单个请求中执行此类复杂查询。但是,您可以提取您不希望提前匹配的密钥,并从中构建辅助查询。 我已经根据您的代码编写了一个示例:

// Assuming we're actually dealing with 3 different classes,
//   and these can't be combined into a single query
var class1Query = new Parse.Query('Class1');
class1Query.equalTo('id', id1);
var class2Query = new Parse.Query('Class2');
class2Query.equalTo('id', id2);
var class3Query = new Parse.Query('Class3');
class3Query.equalTo('id', id3);
// Fetch the results from all three queries simultaneously
Parse.Promise.when([
  class1Query.find(),
  class2Query.find(),
  class3Query.find()
]).then(function(results) {
  // results will contain three arrays of results
  // We can now build a query where the objectId is not equal
  //   to any of the objectIds of the results
  var ids = [];
  results.forEach(function(set) {
    set.forEach(function(obj) {
      ids.push(obj.id);
    });
  });
  return new Parse.Query('FinalClass').notContainedIn('objectId', ids).find();
})

我想提醒您,此查询对大型数据集不会有效。 "不等于"查询永远不会很快,因为它们必须循环遍历表中的每个对象。如果有其他方法来获取您的数据,我非常鼓励。