Запросы ссылок преобразуются в has at least one of ___ where X is true
, поэтому
.equalsTo("books.countPages", 100).equalsTo("books.genre", "non-fiction")
говорит «автор, у которого есть хотя бы одна книга с countPages 100, и у которой есть хотя бы одна книга с жанром non-fiction» -что является правдой!Но это не то, что вам нужно.
Есть два способа сделать это:
1.) Запросить существующий набор результатов, чтобы получить «меньший» результат:
realmQuery.where()
.equalTo("books.countPages", 100)
.findAll()
.equalTo("books.genre", "non-fiction")
.findAll()
2.) Выполнить запрос к Книгам и получить доступ к Автору через связывание объектов обратной связи
@RealmClass
class Book {
@PrimaryKey
val id: String?
val countPages: Long
val genre: String
@LinkingObjects("books")
val authors: RealmResults<Author>? = null
}
И
val books = realm.where<Book>().equalTo("countPages", 100).equalTo("genre", "non-fiction").findAll();
// these books have `authors` field that contains the author