Parse.com 查询超过 1000 个对象
Posted
技术标签:
【中文标题】Parse.com 查询超过 1000 个对象【英文标题】:Parse.com query for more than 1000 objects 【发布时间】:2015-05-19 15:54:30 【问题描述】:我的解析数据库名称为 Timetable,我想从“Intake”列中获取数据,但其中有很多数据,大约 5000 条记录。我知道我们可以获取的最大查询对象是 1000,但是如何获取超过 1000 条记录呢? 我写的代码只查询1000
var query = PFQuery(className: "Timetable")
var limit:NSInteger = 1000
var skip:NSInteger = 0
query.limit = limit
query.skip = skip
query.orderByAscending("Intake")
query.findObjectsInBackgroundWithBlock
(objects:[AnyObject]?, error:NSError?) -> Void in
if error == nil
query.findObjectsInBackgroundWithBlock
(objects:[AnyObject]?, error:NSError?) -> Void in
if error == nil
for object in objects! as [AnyObject]
var intakeCode = object["Intake"] as? String
if !self.pickerString.containsObject(object["Intake"] as! String)
self.pickerString.addObject(object["Intake"] as! String)
self.pvIntakeCode.reloadAllComponents()
else
NSLog("Error: %@ %@", error!, error!.userInfo!)
else
NSLog("Error: %@ %@", error!, error!.userInfo!)
我知道这个问题存在于 ***,但我真的不明白它在说什么。 (另一个问题来自这里:Parse.com query for 10000 (10K) objects)。但是我不明白,抱歉再次提问。
【问题讨论】:
@Dato' Mohammad Nurdin 我尝试了您编辑的最新代码,它仍然是相同的输出,仅从那里的表中获取前 1000 条记录 Parse.com - retrieve more than 1000 rows的可能重复 【参考方案1】:1000 条记录的限制是有原因的。您永远不需要在一个查询中检索这么多对象,因为这很可能会阻塞您的应用程序并导致性能下降。
我可以看到您要检索所有记录的两种情况:
-
您想将所有记录呈现给用户
您想对所有记录进行操作
在场景 1 中,您真正想要的是对结果进行分页。由于您一次只能在屏幕上显示几条记录,您应该查询即 100 条记录,然后在用户滚动并接近前 100 条等的末尾时触发下 100 条记录的新查询,直到用户已经滚动浏览了所有内容(这将是一个非常有耐心的用户......)。 您可以通过使用限制和跳过进行查询来解决此问题:
query.setLimit(100)
query.setSkip(skip)
第一次运行,skip 为 0。每连续运行一次,skip 增加 100。
在场景 2 中,您不想在客户端上执行此操作。输入后台作业! https://parse.com/docs/js/guide#cloud-code-advanced-background-jobs
【讨论】:
我已经为 query.limit 和 query.skip 工作了,但是当我跳过时,例如我一开始跳过的是 0,所以在接下来的步骤中,我将基于跳过在我的限制,所以我会跳过 += 限制,但是当我这样做时,它只显示 1000 到 1999 之后的结果,而不是 0 到 999 那么我猜你没有运行第一个查询,skip = 0。用代码更新你的问题供我们查看。 LP,我有一个 ios 应用程序,我可能有一个查询 > 1000。从技术上讲,我不需要所有对象,但我需要一个随机集合,因此它们不能只是前 n 个对象只是但实际上是随机的。我正在考虑查询所有对象(如果大于 1000,则运行多个查询),然后按我的意愿操作它们。 嗨.. @Moonwalkr 是对的。我认为一次获取太多对象是非常糟糕的做法。例如,你有 1,000,000 个用户是什么?你真的想一次把它们全部取出来吗?您应该使用抽样。例如,如果您需要从 1,000,000 的总体中获取 1,000 个随机样本,一个示例是限制为一个数字 X,等于 100,并将 skip 设置为一个随机数 Y,例如 20,获取数据,挑选一个随机数数据的 Z 部分,然后继续,直到获得所需的 1,000 个随机样本。以上是关于Parse.com 查询超过 1000 个对象的主要内容,如果未能解决你的问题,请参考以下文章
Parse.com 查询限制 - 影响 whereKey 限制?
Parse.com 查询返回 nil 的对象和崩溃的应用程序