Почти тот же вопрос, что и Realm, сложный связанный запрос, но с важным вариантом:
В официальных документах https://realm.io/docs/java/latest/#link-queries - пример выбора владельцев коричневых и пушистых собак. Не, как написано в предыдущем вопросе, собаки «Коричневые пушистые», потому что примеры кода не реализуют конъюнкцию.
Итак, мой вопрос: как получить только тех, у кого есть «коричневая» и «пушистая» собака (оба условия для одной и той же собаки)? Это только U2, учитывая данные примера. Второй пример кода из документации добавляет третий фильтр «Желтый», так что ответ кажется правильным, но конъюнкции на полях того же Dog по-прежнему нет. Ниже приведены мои попытки из документов:
// returns both U1 and U2, because U1 owns a Brown dog, and U2 a Fluffy
RealmResults<Person> r1 = realm.where(Person.class)
.equalTo("dogs.name", "Fluffy")
.equalTo("dogs.color", "Brown")
.findAll();
// returns both U1 and U2, because U1 has a Fluffy but it is red, and has also a brown dog (Fido)
RealmResults<Person> r2 = realm.where(Person.class)
.equalTo("dogs.name", "Fluffy")
.findAll()
.where()
.equalTo("dogs.color", "Brown")
.findAll();
Мне нужно было бы проверить сочетание условий над подэлементами в массиве. Мне нужно реализовать это как запрос, чтобы заполнить адаптер. Это возможно с Realm?
Я мечтал о новом виде группировки условий, который позволяет указать несколько условий для элементов поля списка, например:
RealmResults<Person> r3 = realm.where(Person.class)
.beginFilterAny("dogs") // keep only Persons whose at least one dog satisfy:
.equalTo("name", "Fluffy")
.equalTo("color", "Brown")
.endFilterAny()
.findAll();