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活动条目。
我希望这有帮助。