使用 List 查询领域
Realm query with List
我正在使用领域将我的数据存储在 Android 上。很棒的框架!现在我遇到的唯一问题是:
我的数据库中有一个带有国家/地区 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;
}
理论上 link 查询(搜索 "country.id"
)可以实现您想做的事情,但是 link 查询很慢。此外,您还需要将一堆 or()
谓词连接在一起,我不会冒险使用 link 查询。
我建议使用以下内容
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;
}
并且当您在 class 中设置 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();
由于 Realm 数据库添加了 RealmQuery.in()
版本 1.2.0
我建议使用类似的东西。
//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
}
activity/fragments 中用于检索饮料清单的代码
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();
要将字段与值列表匹配,请使用 in。例如,要查找姓名“Jill”、“William”或“Trillian”,您可以使用 in("name", new字符串[]{"Jill", "William", "Trillian"})。 in 谓词适用于字符串、二进制数据和数字字段(包括日期)。
在最新版本的 Realm 7+ 中,您可以使用 anyOf
将字段与值列表进行匹配。
anyOf("name", new String[]{"Jill", "William", "Trillian"})
在旧版本中,使用 in
而不是 anyOf
,对于 kotlin 使用 oneOf
而不是 in
。
我正在使用领域将我的数据存储在 Android 上。很棒的框架!现在我遇到的唯一问题是:
我的数据库中有一个带有国家/地区 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;
}
理论上 link 查询(搜索 "country.id"
)可以实现您想做的事情,但是 link 查询很慢。此外,您还需要将一堆 or()
谓词连接在一起,我不会冒险使用 link 查询。
我建议使用以下内容
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;
}
并且当您在 class 中设置 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();
由于 Realm 数据库添加了 RealmQuery.in()
版本 1.2.0
我建议使用类似的东西。
//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
}
activity/fragments 中用于检索饮料清单的代码
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();
要将字段与值列表匹配,请使用 in。例如,要查找姓名“Jill”、“William”或“Trillian”,您可以使用 in("name", new字符串[]{"Jill", "William", "Trillian"})。 in 谓词适用于字符串、二进制数据和数字字段(包括日期)。
在最新版本的 Realm 7+ 中,您可以使用 anyOf
将字段与值列表进行匹配。
anyOf("name", new String[]{"Jill", "William", "Trillian"})
在旧版本中,使用 in
而不是 anyOf
,对于 kotlin 使用 oneOf
而不是 in
。