将大量数据传递给解析查询

Passing a big amount of data to a Parse Query

我正在使用一个应用程序,该应用程序使用 table 和(姓名、性别)作为模式。这用于检索给定名称的性别。所以我在这里努力实现的是解析一个包含数千个名字的数组,结果 return 每个名字的性别。我可以只调用一次 Parse 吗?

我尝试使用 Parse.Query.or 查询每个名称,但遗憾的是这只支持 10 个不同的查询。

有什么想法吗?

解析每个查询最多只能return 1000 条记录。所以如果你有 N 个名字。它至少需要 N/1000 个查询。

解析限制参考http://profi.co/all-the-limits-of-parse/

为了优化查询,您可以批量生成 1000 个名称并查询 Parse 并将限制设置为 1000。然后迭代所有记录并生成字典。但为了让它更快,您可以异步进行这些调用。

例子

// function to fetch gender of list of names
function fetchGenderOfNames(arrayOfNames, successCallback, errorCallback){
    var numberOfBatches = (arrayOfNames.length/1000 + (arrayOfNames.length % 1000)? 1 : 0),
        callCount = 0,
        genderOfNames = {},
        errorFlag = false;
    function querySuccessCallback(records){
        if(!errorFlag){
            records.forEach(function(record){
                genderOfNames[record.get('name')] = record.get('gender');
            });
            callCount++;
            if(callCount == numberOfBatches){
                successCallback(genderOfNames);
            }
        }
    }
    function queryErrorCallback(error){
        if(!errorFlag){
            errorFlag = true;
            errorCallback(error);
        }
    }
    for(var arrayIndex = 0; arrayIndex < arrayOfNames.length; arrayIndex += 1000){
        if(!errorFlag){
            var genderQuery = new Parse.Query('Table_name');
            // following match will be case sensitive
            genderQuery.containedIn('name', arrayOfNames.slice(arrayIndex, arrayIndex + 1000);
            genderQuery.limit(1000);
            genderQuery.find({success: querySuccessCallback, error: queryErrorCallback});
        }
    }
}