Parse.com查询超过1000个对象

时间:2015-05-19 15:54:31

标签: ios xcode swift parse-platform xcode6

我将解析数据库名称作为时间表,我想从“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!)
                }

我知道这个问题来自stackoverflow,但我真的不明白它说的是什么。 (另一个问题来自:Parse.com query for 10000 (10K) objects)。但我不明白,很抱歉再次提出这个问题。

1 个答案:

答案 0 :(得分:1)

有1000个记录的限制是有原因的。您永远不需要在一个查询中检索那么多对象,因为这很可能会阻塞您的应用程序并导致性能低下。

我可以看到两种情况,你想要检索所有记录:

  1. 您想要向用户显示所有记录
  2. 您想对所有记录执行操作
  3. 在方案1 中,您真正想要的是翻阅结果。由于您一次只能在屏幕上显示一些记录,因此您应该查询即100条记录,然后在用户滚动并接近前100条记录的末尾时触发下一条100条记录的新查询,直到用户已经滚动浏览所有用户(这将是一个非常耐心的用户...)。 您可以通过查询限制和跳过来解决此问题:

    query.setLimit(100)
    query.setSkip(skip)
    

    首次运行,跳过为0.对于每次连续运行,您都会以100增加跳过。

    在方案2 中,您不希望在客户端上执行此操作。输入后台工作! https://parse.com/docs/js/guide#cloud-code-advanced-background-jobs