Запрос области по двум параметрам в списке - PullRequest
0 голосов
/ 18 мая 2018

У меня есть два объекта: Автор и Книга.

@RealmClass
class Author {
    @PrimaryKey
    val id: String?
    val books: RealmList<Book> = RealmList()
}

@RealmClass
class Book {
    @PrimaryKey
    val id: String?
    val countPages: Long
    val genre: String
}

И у меня есть данные в области, например:

{
    "id": "author1",
    "books": [
        {
            "id": "book1",
            "countPages": 100,
            "genre": "fantasy"
        },
        {
            "id": "book2",
            "countPages": 150,
            "genre": "non-fiction"
        }
    ]
}

Я хочу найти авторов с книгами, которые имеютконкретный жанр и количество страниц.Если я напишу что-то вроде этого:

realmQuery.where().equalsTo("books.countPages", 100).equalsTo("books.genre", "non-fiction").find()

Я получу одного автора с id = author1.Но это не правда, я должен получить пустой список.

Как мне написать запрос для достижения этого?

1 Ответ

0 голосов
/ 18 мая 2018

Запросы ссылок преобразуются в 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...