将大量数据传递给Parse查询

时间:2015-11-13 15:43:29

标签: parse-platform cloud-code

我正在使用一个使用带有(名称,性别)的表作为模式的应用程序。这用于检索给定名称的性别。因此,我在这里努力实现的是解析一个包含数千个名称的数组,并返回每个名称的性别。我可以只使用一个Parse调用吗?

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

Parse每个查询最多只能返回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});
        }
    }
}