iOS Parse.com内部查询不会获取所有对象

我正在使用parse.com内部查询遇到麻烦。 这是我的代码。

PFQuery *innerQuery = [PFUser query]; [innerQuery whereKey:@"deactive" equalTo:[NSNumber numberWithBool:NO]]; PFQuery *query = [PFQuery queryWithClassName:@"Post"]; [query orderByDescending:@"voteCount"]; [query setLimit:1]; [query whereKey:@"user" matchesQuery:innerQuery]; [query findObjectsInBackgroundWithBlock:^(NSArray objects, NSError error) { //some code }]; 

这是一个问题。 在Parse.com中,内部查询最大限制数量也是1000。 在我的代码中,在User类中检索1000个对象并在其中执行查询。 如果用户数超过1000,则其他用户不在内部查询。 所以我不能得到它是voteCount属性最大的post对象。

我该如何解决? Parse是不可能的?

您需要在完成块内重新启动一个查询。

如果您有1000个结果,我们假设还有更多的要获取并使用新参数skip执行另一个查询。 Skip和你所知道的完全一样,但是会skip X的第一个结果。

所以你有1000的limit ,1000的result ,和一个新的query

您必须将您的limit值设置为您的skip值,以便为第二批次跳过完全相同的数字(通常只是最大值1000)。

你重复这个,直到你的result计数小于1000,这意味着没有更多的对象要取。

设置跳转值与设置限制相同。

 [query setLimit:1000]; [query setSkip:1000]; 

或者如果你喜欢dynamic

 [query setLimit:1000]; [query setSkip:query.limit]; 

编辑:如果你不需要所有的信息,但只有最重要的(通常只是最新的date),那么你可以简单地sorting你的查询。

 [query orderByAscending:@"createdAt"]; //or descending, or updatedAt, or your own fields 

您也可以使用谓词或更多sorting描述符来减less请求的大小。

你可以设置跳跃。 所以你做抓取,对于下一个1000,你设置跳转到1000,下一个和下一个相同。

你应该改变结构,我想我明白你只想提取活跃用户。 我build议你添加一个关键的post称为“积极”。 每次禁用用户时,将“false”设置为“active”键然后只提取“active”键设置为true的post。

我想知道,它会帮助做一个查询,并将其设置为升序sorting,以便您可以得到最早的结果。 然后将它与setSkip和setLimit结合起来,以跳过第一个尽可能多的'False'的post? 这是我能想到的唯一select。

另一个解决方法是设置post的到期时间(我不确定你是否使用这个可以容纳这个),所以如果一个post已经被创build或修改,但是多个月/天/年前,它将被视为无效。 这样,您可以对项目的属性修改或创build查询,并设置从date开始的天数的标准。

因此,例如,如果要在过去6个月内激活已激活的项目,则可以查询2015年8月1日以后具有updatedAt属性的项目。

您可以将它们合并,以便首先获取所有post,然后设置date条件并search活动条目。

我希望这有帮助。