为什么我得到“'Aggregate operations can only be used on RLMArray properties'”?

Why I'm getting "'Aggregate operations can only be used on RLMArray properties'"?

我的 Realm 数据库有以下查询

realm.objects(Event)
     .filter("ANY presentation.speakers.lastName CONTAINS [c]%@", searchTerm)

不幸的是它不工作,我收到以下错误

'Invalid predicate', reason: 'Aggregate operations can only be used on RLMArray properties'

presentation 是在 Event class

上定义的可选实体
public dynamic var presentation : Presentation?

speakersList<PresentationSpeakers> 在演示文稿中这样定义的

public let speakers = List<PresentationSpeaker>()

我的感觉是 ANY 必须直接对集合进行操作,但 speakers 不是 Event 的直接 属性。

我的查询有什么问题,我该如何正确执行它?

因为 presentation 是一对一的关系,所以没有必要在你的查询中写 ANY:

realm.objects(Event)
     .filter("presentation.speakers.lastName CONTAINS [c]%@", searchTerm)

ANY 对于 speakers 属性 是隐含的,因为它是一个嵌套的键路径。要指定 ANY 以外的内容,您可以像这样在 speakers 上使用修饰符:

realm.objects(Event)
     .filter("presentation.speakers[FIRST].lastName CONTAINS [c]%@", searchTerm)

但是,Realm 还不支持这种查询。

有关谓词以及 Realm 支持哪些谓词的更多信息,请参阅 Realm 的谓词作弊 sheet:https://realm.io/news/nspredicate-cheatsheet/