如何使用 NSPredicate 和 CloudKit 为特定用户获取最新的 Post?

How to fetch the latest Post for specific users using NSPredicate and CloudKit?

假设我在 iCloud 中有以下型号:

 ___________         ___________
| Users     |<-_    | Posts     | 
|-----------|   |   |-----------|
| firstName |   |   | text      |
| lastName  |   --- | user      |
 -----------         -----------

我需要为特定的 user 参考获取最新的 Posts

目前我正在使用这样的谓词:

let userRefs: [CKReference] = [...]
let predicate = NSPredicate(format: "%K IN %@ AND creationDate >= %@", "user", userRefs, NSDate.twentyFourHoursAgo)

let query = CKQuery(recordType: "Posts", predicate: predicate)
query.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]

但它为我提供了过去 24 小时内的所有用户 Posts。有没有办法只获得一个,最新的,post each 提供的用户参考?

期望的结果是特定用户(例如 [user1, user2, user3])的最新 Posts 数组:

[
    Post<text, user1>
    Post<text, user2>
    Post<text, user3>
]

如果您想检索与默认值(通常最多 100 个)不同的记录数,请使用 CKQueryOperation 并设置 .resultsLimit

在您的情况下,您可以在仅对 1 个用户执行查询时将其设置为 1。

您实际想要执行的查询无法使用 CloudKit,因为您需要某种聚合查询。不支持聚合查询。所以解决这个问题的唯一方法是为每个用户执行查询以获取最新的 post。

但是有一个可行的解决方法。我以前做过类似的事情。当用户添加新的 post 时,您还可以更新用户数据并将最新的 post 添加到用户 recrodType。你会有一些重复的数据,但你可以通过查询用户获得所有最新的 posts。