我在使用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是不可能的?
答案 0 :(得分:2)
您需要在完成块内重新启动查询。
如果您有1000个结果,我们假设还有更多要获取并使用新参数skip
执行另一个查询。 Skip
与您所知道的完全相同,但skip
X首先会产生结果。
所以你的limit
为1000,result
为1000,新query
为。
您必须将limit
值提供给skip
值,这样您就可以跳过第二批完全相同的数字(通常只有最大值1000)。
您重复此操作,直到result
计数为<超过1000,这意味着没有更多的对象可以获取。
设置跳过值与设置限制相同。
[query setLimit:1000];
[query setSkip:1000];
或者如果你喜欢动态
[query setLimit:1000];
[query setSkip:query.limit];
编辑:如果您不需要所有信息,只需要最重要的信息(通常只是最新日期),那么您只需对查询进行排序。
[query orderByAscending:@"createdAt"]; //or descending, or updatedAt, or your own fields
您还可以使用谓词或更多排序描述符来减小请求的大小。
答案 1 :(得分:1)
你可以设置Skip。所以你进行了获取,然后在接下来的1000中,你将跳过设置为1000,并为下一个和下一个设置相同。
答案 2 :(得分:0)
您应该更改结构,我想我明白您只想获取活跃用户。我建议你在帖子中添加一个名为“active”的键。 每次禁用用户时,将“false”设置为“active”键 然后只获取关键字“active”设置为true的帖子。
答案 3 :(得分:0)
我想知道,查询并将其设置为升序排序会有所帮助,以便您首先获得最早的结果。然后将它与setSkip和setLimit结合使用,以跳过第一个数量很多的'False'帖子?这是我能想到的唯一选择。
另一个解决方法是为帖子设置一个到期时间(我不确定你使用它的是否适合这个),这样如果一个帖子已被创建或修改,那么很多个月/天/年前,它将被视为不活跃。这样,您可以对项目的属性进行修改或创建查询,并设置自该日期起的天数标准。
例如,如果您希望拥有过去6个月内处于活动状态的项目,则查询2015年8月1日之后updatedAt属性的项目。
您可以将它们组合在一起,以便首先获得所有帖子,然后设置日期条件并搜索活动条目。
我希望这会有所帮助。