假设下一个情况:
//I don't put the getters and setters, but assume they are there
public class User extends RealmObject {
private RealmList<Dog> dogs;
}
public class Dog extends RealmObject {
//UPDATE: I've added the variable city, to make my question more exact
private String city;
private String color;
private String name;
}
假设: 人1有狗:NY-white-Joe 人2有狗:NY-brown-Mary,SF-white-Fluffy,LA-brown-Fluffy 人3有狗:NY-brown-Fluffy,LA-white-Pepito
问题:如何查询所有有棕色狗叫蓬松的人?
我尝试使用隐式AND:
RealmQuery<User> userQuery = realm.where(User.class).equalTo("dogs.color", "brown").equalTo("dogs.name", "Fluffy");
然后我已经阅读了文档,并且两个equalTo()条件被单独评估,这意味着我将拥有:
所有拥有棕色狗和狗的用户称为Fluffy。 (所以结果是P2,P3)。
我应该如何编写此查询以将条件应用于同一条狗?
答案 0 :(得分:1)
在我看来,最好的方法是使用主键查询。我的意思是首先将主键添加到Dog
类:
class Dog extends RealmObject {
@PrimaryKey
private int id;
private String color;
private String name;
}
然后第一步找到有一只名叫Fluffy的棕色狗的用户,就是找到这种狗的主键。因此,我们进行查询以找到确切的Dog
:
Dog dog = realm.where(Dog.class).equalTo("color", "brown").equalTo("name", "Fluffy").findFirst();
之后我们正在搜索具有已定义主键(id字段)的狗的用户:
RealmResults<User> users = realm.where(User.class).equalTo("dogs.id", dog.getId()).findAll();
答案 1 :(得分:1)
Realm中的链接查询是存在量词(https://en.wikipedia.org/wiki/Existential_quantification)。这意味着如果子类中只有一个对象满足条件,则父类中的对象将添加到RealmResults
。
Link query example展示了存在量词的运作方式。目前,您必须迭代User
并单独查询Dogs
列表。
反向查找有一个开放的issue。