CloudKit:在一个查询中获取记录和引用(就像在 Parse 中一样)

CloudKit: fetch record and references in one query (like in Parse)

随着 Parse 即将消亡,我正在使用 CloudKit 重写一个应用程序。假设我正在制作一个食谱计划应用程序。我想要一个给定的时间表包含一个有序的食谱列表,并且食谱可以在多个时间表中。所以我有:

假设我有 Schedule 对象,并且我想在一个查询中获取它的所有 ScheduleItems 及其关联的 Recipes。在 Parse 中,我可以设置这个查询:

PFQuery *query = [PFQuery queryWithClassName:@"Schedule"];
[query includeKey:@"scheduleItems.recipe"];

并且该查询将获取所有 scheduleItems 及其所有食谱,让我不必执行多个网络请求。

在 CloudKit 中有没有办法做到这一点?我看到我可以使用 CKFetchRecordsOperation 一次获取多个记录给定的记录 ID,但是在我已经获取 scheduleItems 之前我不知道食谱的记录 ID,因此仍然需要第二个网络请求。

CloudKit 不是关系数据库。这是一个键值存储。没有在一个查询中查询多个 recordType 的功能。也没有聚合查询的功能。在你的情况下,因为它是一对一的关系,你可以通过在你的食谱中添加一个 CKReference 到 Schedule 来将它限制为 2 个查询。那么如果你有一个时间表,你可以做一个查询来获取所有相关的 ScheduleItem 和另一个查询来获取所有相关的食谱

即将到来的版本 ('16) 中有一种方法:您可以定义 parent 关系,然后获取 parent 记录将导致 children 也被获取.这在 WWDC session“CloudKit 的新增功能”(2016 年)中有所介绍:https://developer.apple.com/videos/play/wwdc2016/226/

更正,'16 中引入的 parent 引用不是为了使执行单个提取成为可能,而是在使用 [=15= 的新共享部分时自动共享所有后代].所以答案是否定的,还是没办法,但是共享记录的时候,稍微不那么繁琐。