解析多个 doesNotMatchKeyInQuery

Parse Multiple doesNotMatchKeyInQuery

我在 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);
    }
});

不可能在单个请求中执行如此复杂的查询。但是,您可以提前获取您不想匹配的键,并从中构造一个辅助查询。 我已经根据您上面的代码编写了一个示例:

// 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();
})

我想提醒您,此查询对于大型数据集效率不高。 "Does not equal" 查询永远不会很快,因为它们必须遍历 table 中的每个对象。如果有其他方式获取您的数据,我强烈推荐。