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 的对象和崩溃的应用程序

Parse.com 查询麻烦

Oracle数据库查询用 where in 查询的项超过1000条的解决方案

Parse.com 查询两个日期

设置 UITabBarItem 徽章