领域查询与列表

时间:2015-08-18 07:52:42

标签: android realm

我正在使用领域在Android上存储我的数据。真棒的框架!现在我唯一的问题是:

我的数据库中有一个国家ID为id的数组列表字符串。

现在我检索包含与国家关系的饮料。

有没有办法可以像这样进行查询:

String [] ids;

realm.where(Drinks.class).equalsTo("country.id", ids);

那样的东西?

或者我是否真的需要进行查询以获取所有饮料,然后手动过滤列表?

编辑:

我的课程:

public class Drinks extends RealmObject {
    @PrimaryKey
    private String id;
    private String name;
    private Country country;
}

public class Country extends RealmObject {
    @PrimaryKey
    private String id;
    private String name;
}

4 个答案:

答案 0 :(得分:7)

理论上可以使用链接查询(搜索"country.id"),但是链接查询很慢。此外,您还需要将一堆or()谓词连接在一起,并且我不会冒险使用链接查询。

我建议使用以下

public class Drinks extends RealmObject {
    @PrimaryKey
    private String id;
    private String name;
    private Country country;
    @Index
    private String countryId;
}

public class Country extends RealmObject {
    @PrimaryKey
    private String id;
    private String name;
}

当您在班级中设置Country时,您还将countryId设置为country.getId()

一旦你这样做,你可以构建这样的:

RealmQuery<Drinks> drinkQuery = realm.where(Drinks.class);
int i = 0;
for(String id : ids) {
    if(i != 0) {
        drinkQuery = drinkQuery.or();
    }
    drinkQuery = drinkQuery.equalTo("countryId", id);
    i++;
}
return drinkQuery.findAll();

答案 1 :(得分:4)

由于Realm数据库已添加版本为1.2.0

的RealmQuery.in()

我建议使用这样的东西。

//Drinks
public class Drinks extends RealmObject {
@PrimaryKey
private String id;
private String name;
private String countryId;

//getter and setter methods
}

//Country
public class Country extends RealmObject {
    @PrimaryKey
    private String id;
    private String name;

//getter and setter methods
}

在活动/片段内使用以检索饮品列表的代码

String[] countryIdArray = new String[] {"1","2","3"} //your string array
RealmQuery<Drinks> realmQuery  = realm.where(Drinks.class)
            .in("countryId",countryIdArray);
RealmResults<Drinks> drinkList = realmQuery.findAll();

答案 2 :(得分:0)

要将字段与值列表匹配,请使用in。例如,要查找名称“ Jill”,“ William”或“ Trillian”,可以使用in(“ name”,new String [] { “吉尔”,“威廉”,“特里利安”})。 in谓词适用于字符串,二进制数据和数字字段(包括日期)。

文档-> https://realm.io/docs/java/latest#queries

答案 3 :(得分:0)

在最新版本的Realm 7 + 中,您可以使用anyOf将字段与值列表进行匹配。

anyOf("name", new String[]{"Jill", "William", "Trillian"})

在较早的版本中,使用in代替anyOf,对于kotlin,使用oneOf代替in

请参阅this issue