据我所知,您可能使用指针数组的唯一原因是保留排序,因为PFRelation实例不支持排序。否则,它们似乎表现相同,尽管PFRelation更具可扩展性,并且还具有漂亮的内置查询功能。将查询限制为PFRelation实例中的对象的方法,这有时非常有用。
PFRelation *relation = ...
PFQuery *query = [relation query];
上下文:我正在构建一个应用程序,其中每个PFUser实例都有很多TennisGame实例(可能是一个很大的数字),而TennisGame实例有很多PFUser实例(2或4,取决于无论是单打比赛还是双打比赛。)
问题:在parse.com上整理数据的最佳方法是什么?我正在考虑PFUser类(到TennisGame实例)中的PFRelation,以及我的TennisGame类(到PFUser实例)中的数组或2或4个指针。但我需要两者吗?如果没有,哪个最好?
答案 0 :(得分:9)
问题是如何访问您的数据。对于您的情况,您可以考虑以下问题:
include
。您无法通过关系进行include
,还需要再进行一次查询才能访问用户的网球游戏。我建议您观看this video关于Parse开发者日的Parse关系。
而且,你不需要保持双方的关系。这将使创建和更新它们变得更加复杂。
答案 1 :(得分:0)
knshn的答案并不好,因为它假设PFRelation
必须随时使用{" MANY"由于性能问题,side有100多个关系。
这不是真的,因为你可以用"指针关系"创建一对多的关系。和Parse可以处理100多个关系没问题。或者它甚至可以有效地处理与#34;数组关系的多对多关系"当一方有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到A-LOT的关系时,它是理想的,因此使用PFRelation
来表示类似于"关注者"在社交网络应用程序上是有道理的,因为每个帐户可以拥有超过100个"粉丝#34;并且每个帐户都可以成为"关注者"超过100个其他帐户。