gpt4 book ai didi

javascript - Parse.Query.each() 不包括所有记录

转载 作者:行者123 更新时间:2023-12-01 13:59:11 26 4
gpt4 key购买 nike

我在最新的 Parse javascript SDK (v 1.4.2) 中发现了一个错误Parse.Query.each() 似乎并没有遍历所有匹配的记录。它似乎在某个点后停止了。

我有一个 UserLocation 类,用于存储用户位置 GeoPoints(在“geo”列中)。我正在尝试查找与 field 位置的距离小于 10 英里的用户位置列表。据我了解,Parse.Query.find() 的限制为 1000。根据这篇文章,Parse.Query.each() 没有这样的限制: https://parse.com/questions/pfquery-setskip-does-not-skip-beyond-10000

但从我的测试结果来看,情况似乎并非如此:

mylocation.get("deviceId")
"fa72f38bc0af44f090824a38fd1963b4"
venueGeo.milesTo(mylocation.get("geo"));
2.1965871191375173

如您所见,我的位置距会场位置约 2 英里。但是如果我运行 10 英里的距离查询,结果中没有我的位置:

var locationQuery = new Parse.Query("UserLocation").withinMiles("geo", venueGeo, 10);
results = [] ;
locationQuery.each(function(location) {results.push(location.get("deviceId"))})
b.Promise {_resolved: false, _rejected: false, _resolvedCallbacks: Array[0], _rejectedCallbacks: Array[0], resolve: function…}
results.length
107
results.indexOf("fa72f38bc0af44f090824a38fd1963b4")
-1

但是如果我向查询添加额外的约束以返回其 deviceId 等于我所在位置的设备的记录。 Parse.Query.each() 实际上包括它。我想象新查询将仅返回先前查询的子集。但它实际上返回了一条不在先前查询中的记录:

var locationQuery = new Parse.Query("UserLocation").withinMiles("geo", venueGeo, 10).equalTo("deviceId", "fa72f38bc0af44f090824a38fd1963b4");
results = [] ;
locationQuery.each(function(location) {results.push(location.get("deviceId"))})
b.Promise {_resolved: false, _rejected: false, _resolvedCallbacks: Array[0], _rejectedCallbacks: Array[0], resolve: function…}
results.length
1
results.indexOf("fa72f38bc0af44f090824a38fd1963b4")
0

如果我使用 Parse.Query.limit(1000) 和 Parse.Query.skip() 翻阅记录,我终于在第 8 页找到了我的记录

locationQuery.skip(7000)
locationQuery.find().then(function(locations){
results = locations.map(function(location){
return location.get("deviceId");
})
})
results.indexOf("fa72f38bc0af44f090824a38fd1963b4")
-1

locationQuery.skip(8000)
locationQuery.find().then(function(locations){
results = locations.map(function(location){
return location.get("deviceId");
})
})
results.indexOf("fa72f38bc0af44f090824a38fd1963b4")

927

但是分页有其自身的局限性,因为您不能跳过超过 10000 条记录,更不用说它的效率较低。

这似乎与 Parse javascript 文档所说的 Parse.Query.each() 没有限制相矛盾。有人遇到过同样的问题吗?

最佳答案

我没有在文档中看到我们被告知 each() 不受 1k 限制的限制,但它不会受到限制是合理的。发布的代码显示调用和响应在我看来可能会受到竞争条件的影响,也就是说,在测量结果时可能无法实现每个 promise 。这是一个很可能找到记录的确定性测试:

var locationQuery = new Parse.Query("UserLocation");
locationQuery.withinMiles("geo", venueGeo, 10);
results = [];
locationQuery.each(function(location {
results.push(location.get("deviceId"));
}).then(function() {
console.log("results length=" + results.length);
console.log("index of target device id=" + results.indexOf("fa72f38bc0af44f090824a38fd1963b4"));
});

关于javascript - Parse.Query.each() 不包括所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29996432/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com