使用Parse.Query.find()时我遇到了一些奇怪的行为,我希望有人可以告诉我我的错误。我的情况是我在查询中包含一个数组字段,有时,在随机记录中,一些包含的数组元素为空。我已经验证了数组元素确实不是null。另外,如果我使用each()而不是find(),我没有看到这个问题。另外,如果我将我一次读取的记录数(CHUNK_SIZE)从Parse的1000最大值减少到500,那么一切正常,所以我不确定发生了什么。
这是我正在使用的代码。
/**
Iterates over a query using find(), which is very fast, compared to each().
Works up to 10,000 records maximum.
@param query Parse.Query to iterate.
@param callback Called for each batch of records.
@return Promise, fulfilled when iteration is done.
*/
function findAll(query, callback) {
var queryCount = 0;
var startTime = new Date();
var CHUNK_SIZE=1000;
query.limit(CHUNK_SIZE);
var queryFind = function() {
query.skip(CHUNK_SIZE * queryCount);
queryCount++;
return query.find().then(function(rows) {
callback(rows);
if (rows.length == CHUNK_SIZE) {
return queryFind();
}
});
}
return queryFind();
}
// Example of how to use findAll.
function fetchTree() {
var records = 0;
var query = new Parse.Query('TreeNode');
query.include('scores');
return findAll(query, function(nodes) {
nodes.forEach(function(node) {
records++;
node.get('scores').forEach(function(score, scoreIndex) {
if (!score) {
throw "Null score at row " + node.id + "/" + records + " index " + scoreIndex;
}
});
});
}, true);
}
fetchTree();
提前致谢。
答案 0 :(得分:2)
将每个查询返回的行限制为默认值50,最大值为1000。
此限制包含相关记录,因此,如果您获得10条记录,每条记录在其数组中平均有50个指针,而您include()
则表示您使用的是500/1000最大记录查询。