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

时间:2015-04-13 12:21:19

标签: ios objective-c iphone parse-platform

我在使用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是不可能的?

4 个答案:

答案 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属性的项目。

您可以将它们组合在一起,以便首先获得所有帖子,然后设置日期条件并搜索活动条目。

我希望这会有所帮助。