解析 - 查询不在查询中的对象

时间:2015-10-23 19:41:22

标签: javascript objective-c parse-platform

我的用户类有关系"关注"对于他们关注的所有用户。这种情况很好。每个用户还有一个" FacebookID" String类型的列。我想查询所有不在"关注"关系。

例如,假设我有用户A,B和C,其中A跟随B.对于用户A,我的查询应该返回C,因为这是A不跟随的唯一用户。

以下是我目前使用的代码(在Objective-C中使用它,但可以随意用任何语言进行响应。我熟悉JS,Java,Swift和Parse中的Parse OBJ-C):

PFUser *user = [PFUser currentUser];
PFRelation *follows = user[@"Follows"];

PFQuery *query = [PFUser query];
//Make sure it's not in the followers
[query whereKey:@"FacebookID" doesNotMatchKey:@"FacebookID" follows.query];
//Make sure it's not the current user
[query whereKey:@"FacebookID" notEqualTo:user[@"FacebookID"];
[query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) {
    NSLog(@"Found %lu users that the current user doesn't follow.", objects.count);
}];

这样做有效,但只要用户的跟踪计数超过1000,就不会因为该关系只返回前1000个而获胜。

我只希望在他们不关注的时间内在整个用户群中找到大约10个人,而不一定是所有用户。你会怎么做呢?

2 个答案:

答案 0 :(得分:0)

我认为答案在于whereKey:doesNotMatchKey:inQuery:的用户,但我不确定您的数据模型。 Follows是否与PFUser的目标类有关系?在这种情况下,您想要的查询可以简洁地陈述为......

PFRelation *follows = user[@"Follows"];
PFQuery *innerQuery = [follows query];
PFQuery *query = [PFUser query];
query.limit = // your choice, up to 1000
[query whereKey:@"objectId" doesNotMatchKey:@"objectId" inQuery:innerQuery];

请注意,这并不是指OP引用的用户的“FacebookID”字符串列。如果正确设置了与用户的以下关系,则不需要。

答案 1 :(得分:0)

所以我和Parse工程师交谈过,看来我想要做的查询类型实际上受限于1000对象响应限制,所以我会在Parse平台上避免这种情况。他提到这是他们所关注的东西,所以希望它不会成为一个问题!