0

我最近发现了在我的应用程序中使用后端作为服务平台的强大功能,它们很棒,但问题是没有多少教程可以指导您在这些平台上完成这么多特殊的数据库结构实现,所以我想出了这个流行的场景来弄清楚

结构是用户可以写一个帖子并附加主题标签(最多'n'),这些主题标签显然可以附加到许多帖子,这是典型的多对多关系场景,您将如何建议数据库结构执行以下查询?

  1. 用户表有一个位置列,查询是获取当前用户位置 50 英里内特定主题标签的所有帖子?
  2. 当前用户位置周围的流行主题标签(附加到其他用户创建的帖子)

PS 这些是我能想到的一些一般场景,如果您认为对 Parse 社区有帮助,请在您的答案中附加任何其他流行的场景。

4

1 回答 1

1

Parse 不提供完整的关系数据库,但您可以将关系列添加到数据类,这允许类之间的多对多关联。因此,例如,您可以创建一个hashtag类,并在您的post类中添加一个包含相关主题标签的关系列。查询 1 可以通过针对hashtagclass 构建查询,指定所需的主题标签,然后将其添加为针对postclass 的查询的子查询来回答。在您的包含查询中,您将指定您正在寻找post用户位置附近的 s。例如

PFQuery *tagQuery = [PFQuery queryWithClassName:@"hashtag"];
[tagQuery whereKey:@"tagName" equalTo:@"hash_tag_name"];

PFQuery *postQuery = [PFQuery queryWithClassName:@"post"];
[postQuery whereKey:@"hashtags" matchesQuery:tagQuery];
[postQuery whereKey:@"location" nearGeoPoint:userLocation withinMiles:50.0];

[postQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    //Do something with results
}];

我想不出用单个 Parse 查询提取第二个查询的数据的简单方法。一种方法是仅检索post当前位置附近的 s,然后遍历它们以确定与每个标签相关联的标签(并计算它们的频率)。

另一种选择是将标签存储为针对帖子的字符串数组。然后,您可以使用whereKey:equalTo:(单个标签)或whereKey:containedIn:(多个标签)按标签查询。使用这种方法,您需要跟踪其他地方存在哪些标签。

于 2013-08-05T04:10:05.470 回答