parsing通过指针sorting查询

我需要使用Parse进行简单的查询sorting。

我有两个class: CaptainBoat

每个Captain都有一个Boat指针对象。

我列出了所有Captain对象的属性,如名字,船名等

我需要能够通过船名来sortingCaptain对象的查询。 我怎么能够?

我可以使用NSSortDescriptorsorting键(例如Captain name对直接属性进行sorting。 但是我需要用他们Boatname来排列Captain对象。

请帮忙!

如果您可以在sorting限定符上使用点符号,那将是很好的,例如:

 [captainQuery orderByAscending:@"boat.name"]; 

不幸的是,属性点符号仅适用于includeKey :. 所以要做到这一点,包括相关的对象,然后使用相关对象的属性进行本地sorting:

 // ... [captainQuery includeKey:@"boat"]; [query findObjectsInBackgroundWithBlock:^(NSArray *captains, NSError *error) { NSArray *sortedCaptains = [captains sortedArrayUsingComparator: ^(PFObject *capA, PFObject *capB) { return [capA[@"boat"][@"name"] compare:capB[@"boat"][@"name"]]; // or reverse param order for descending }]; }]; 

编辑 – @Logan有帮助地指出,如果您的查询通过成千上万的船长,这个答案不能很好地扩展。 如果队长数量巨大,最好是包括船长指针,然后执行以下操作:

更迂回地说,你可以取船,按照名字命名,包括船长(如果你的船有指向船长),然后映射返回(sorting)的船只为他们的船长。

您可以将关系查询用于多个查询,查询代码应如下所示:

 PFObject *captain = [PFObject objectWithClassName:@"Captain"]; PFRelation *relation = [captain relationForKey:@"Boat"]; PFQuery *relQuery = [relation query]; [relQuery orderByDescending:@"name"]; // Add other query constraints [relQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { if (error) { // There was an error } else { // All the captains sorted by related boat's names } }]; 

下面有一些有用的链接:

http://blog.parse.com/2012/05/17/new-many-to-many/ https://parse.com/docs/ios_guide#objects-pointers/iOS

这里有一个可扩展的解决scheme,开销很小:目前你有一张船和一张船长表,每个船长都有一个指向船的指针。

你应该添加第三个表 – 让我们称之为“船长”,其中包含船长对象中包含的所有船只。 在添加新队长时,通过添加船来维护队长,并在删除队长时将其从队伍中移除。

为了通过船只对船长进行分类:

  1. 查询'船长船',按任何sorting。 请注意,即使这张表包含一百万条logging,您也会得到与您相关的第一个X.
  2. 查询“Captains”,从步骤1: [captainQuery whereKey:"boat" containedIn:boatList]使用'containedIn'方法。

  3. 现在你只有你需要的队长对象(可能是百万)。 根据任何地方在本地sorting。