假设下一个情况:
//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;
}
Run Code Online (Sandbox Code Playgroud)
假设:人1有狗:NY-white-Joe Person 2有狗:NY-brown-Mary,SF-white-Fluffy,LA-brown-Fluffy Person 3有狗:NY-brown-Fluffy,LA-white-Pepito
问题:如何查询所有有棕色狗叫蓬松的人?
我尝试使用隐式AND:
RealmQuery<User> userQuery = realm.where(User.class).equalTo("dogs.color", "brown").equalTo("dogs.name", "Fluffy");
Run Code Online (Sandbox Code Playgroud)
然后我阅读了文档并分别评估了两个equalTo()条件,这意味着我将:
所有拥有棕色狗和狗的用户称为Fluffy.(所以结果是P2,P3).
我应该如何编写此查询以将条件应用于同一只狗?
在我看来,最好的方法是使用主键查询。我的意思是首先将主键添加到Dog类中:
class Dog extends RealmObject {
@PrimaryKey
private int id;
private String color;
private String name;
}
Run Code Online (Sandbox Code Playgroud)
那么找到拥有一只名为 Fluffy 的棕色狗的用户的第一步就是找到这种狗的主键。因此,我们进行查询以找到精确的Dog:
Dog dog = realm.where(Dog.class).equalTo("color", "brown").equalTo("name", "Fluffy").findFirst();
Run Code Online (Sandbox Code Playgroud)
之后,我们正在搜索拥有已定义主键(id 字段)的狗的用户:
RealmResults<User> users = realm.where(User.class).equalTo("dogs.id", dog.getId()).findAll();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1643 次 |
| 最近记录: |