是否可以查询包含字符串值列表的多个字段(Realm Java)
Is it possible to query several fields containing a list of string values (Realm Java)
我正在尝试同时查询多个字段,其中包含 Realm 中的字符串值列表。
假设我有以下 Object:
public class Article extends RealmObject implements Serializable{
@PrimaryKey
@Required
private String aID = UUID.randomUUID().toString();
private String title;
private String description;
private String authors;
private RealmList<Tag> tags;
}
我想查询所有文章的标题,或描述,或标签包含的字符串列表。
我知道谓词“in”可用于将值列表与字段匹配,如下所示:
realm.where(Article.class)
.in("title", listOfValues,Case.INSENSITIVE)
.or()
.in("description", listOfValues, Case.INSENSITIVE)
.or()
.in("tags.tag",listOfValues, Case.INSENSITIVE)
.findAll();
这只会return“匹配”值,但我正在寻找“包含”值。还有"contains"谓词,但我认为它只能与一个值进行比较。
有办法吗?
如@EpicPandaForce 在他的评论中建议的那样,解决此问题的方法是迭代并使用包含。这是执行此操作的代码:
RealmResults<Article> newResults;
RealmQuery<Article> where = r.where(Article.class).beginGroup();
for (String keyword : keywords) {
where = where.contains("name", keyword, Case.INSENSITIVE)
.or()
.contains("description", keyword, Case.INSENSITIVE)
.or()
.equalTo("tags.tag", keyword, Case.INSENSITIVE);
}
newResults = where.endGroup().findAll();
一个更简单的答案是直接使用 .contains
(遗憾的是它没有在 realm-java 文档中解释)。
realm.where(Article.class)
.contains("title", listOfValues, Case.INSENSITIVE)
.or()
.contains("description", listOfValues, Case.INSENSITIVE)
.or()
.contains("tags.tag",listOfValues, Case.INSENSITIVE)
.findAll();
从 Realm-Java 代码中您可以找到 2 个方法:
public RealmQuery<E> contains(String fieldName, String value);
public RealmQuery<E> contains(String fieldName, String value, Case casing);
我正在尝试同时查询多个字段,其中包含 Realm 中的字符串值列表。 假设我有以下 Object:
public class Article extends RealmObject implements Serializable{
@PrimaryKey
@Required
private String aID = UUID.randomUUID().toString();
private String title;
private String description;
private String authors;
private RealmList<Tag> tags;
}
我想查询所有文章的标题,或描述,或标签包含的字符串列表。
我知道谓词“in”可用于将值列表与字段匹配,如下所示:
realm.where(Article.class)
.in("title", listOfValues,Case.INSENSITIVE)
.or()
.in("description", listOfValues, Case.INSENSITIVE)
.or()
.in("tags.tag",listOfValues, Case.INSENSITIVE)
.findAll();
这只会return“匹配”值,但我正在寻找“包含”值。还有"contains"谓词,但我认为它只能与一个值进行比较。
有办法吗?
如@EpicPandaForce 在他的评论中建议的那样,解决此问题的方法是迭代并使用包含。这是执行此操作的代码:
RealmResults<Article> newResults;
RealmQuery<Article> where = r.where(Article.class).beginGroup();
for (String keyword : keywords) {
where = where.contains("name", keyword, Case.INSENSITIVE)
.or()
.contains("description", keyword, Case.INSENSITIVE)
.or()
.equalTo("tags.tag", keyword, Case.INSENSITIVE);
}
newResults = where.endGroup().findAll();
一个更简单的答案是直接使用 .contains
(遗憾的是它没有在 realm-java 文档中解释)。
realm.where(Article.class)
.contains("title", listOfValues, Case.INSENSITIVE)
.or()
.contains("description", listOfValues, Case.INSENSITIVE)
.or()
.contains("tags.tag",listOfValues, Case.INSENSITIVE)
.findAll();
从 Realm-Java 代码中您可以找到 2 个方法:
public RealmQuery<E> contains(String fieldName, String value);
public RealmQuery<E> contains(String fieldName, String value, Case casing);