knshn 的回答不好,因为它假设PFRelation
在任何时候都必须使用“MANY”方由于性能问题而具有超过 100 个关系。
这不是真的,因为您可以使用“指针关系”创建一对多关系,而 Parse 可以处理 100 多个关系没有问题。或者当一侧的关系超过100个而另一侧的关系少于100个时,它甚至可以有效地处理“数组关系”的多对多关系。所以正确的答案应该提到拥有超过100个关系成为一个问题仅在使用“数组关系”时,即。制作一个包含 100 多个项目的数组并将其设置为一个对象。
所以回到最初的问题,我建议你PFUser
在实例中有一组玩家TennisGame
,因为每场比赛一次只有 2 或 4 名玩家,或者至少肯定少于 100 人。
因此,如果您想PFUser
从特定TennisGame
实例中获取玩家,则必须执行如下查询:
PFQuery *query = [PFQuery queryWithClassName:@"TennisGame"];
[query includeKey:@"players"];
[query getObjectInBackgroundWithId:tennisGameId block:^(PFObject *tennisGame, NSError *error) {
if (tennisGame) {
tennisGame[@"players"];
}
}];
接下来,如果要获取当前用户玩过的所有游戏,按日期排序,可以执行以下查询:
PFQuery *query = [PFQuery queryWithClassName:@"TennisGame"];
[query addDescendingOrder:@"createdAt"];
[query whereKey:@"players" equalTo:[PFUser currentUser]];
[query findObjectsInBackgroundWithBlock:^(NSArray *tennisGames, NSError *error) {
// do whatever you need with the results
}];
最后,你可能会问,“等等!如果一个玩家玩了超过 100 场比赛,这不会是一个性能问题吗?” 答案是否定的,因为这只是数组的问题,而不是查询的问题。如果将游戏PFUser
作为数组保存在实例中,而不是将玩家数组保存在TennisGame
实例中,这将是一个问题。此外,PFRelation
也是某种查询,因此它是检索大量对象的推荐方法。
奖励:何时使用PFRelation
?
当您需要 A-LOT-to-A-LOT 关系时,它是理想的,因此PFRelation
在社交网络应用程序上使用“关注者”之类的东西是有意义的,因为每个帐户可以有 100 多个“关注者”,每个帐户可以是100 多个其他帐户的“追随者”。