首页 > 解决方案 > 使用精确字符串的 RealmResults 过滤器查询

问题描述

我有一个领域数据库,其中一个字段postCategories包含通过 JSON 从服务器获取的随机字符串类型数据。这些字符串值类似于以下内容:

Semester - I, Marketing, English Version, Short Question
B.Com., Semester - II, E-Commerce, English Version, Broad Question
Semester - III, Marketing, English Version, Short Question
Semester - IV, Company Law, Bengali Version, Short Question
.......

现在,我只想分别过滤postCategories包含Semester - ISemester - IISemester - IIISemester - IV任何一个的 RealmResults。我应该怎么办?

我尝试了以下代码来查找postCategories包含的所有数据Semester - I

RealmResults<RealmTitle> realmTitles;
realmTitles = realm.where(RealmTitle.class)
            .contains("postCategories", "Semester - I").findAll();

但这给出了Semester - ISemester - IISemester - III的所有数据Semester - IV

我可以找到如下临时解决方案。

realmTitles = realm.where(RealmTitle.class)
                .contains("postCategories", "Semester - I")
                .and().not()
                .contains("postCategories", "Semester - II").findAll();

这是为了防止Semester - II与结果一起添加。但这似乎不是一个好的解决方案。请帮助我找到更合适的解决方案。

谢谢你。任何帮助将不胜感激。

标签: javaandroidrealm

解决方案


要选择第一学期或第二学期或第三学期或第四学期,请尝试按模式过滤,即在一个帖子类别中不要有 2 个“学期 - I”:

realmTitles = realm
   .where(RealmTitle.class)
   .contains("postCategories", "Semester - I")
   .and().not().like("postCategories", "*Semester - I*Semester - *")
   .findAll();

如果排除第四学期很重要

realmTitles = realm
   .where(RealmTitle.class)
   .contains("postCategories", "Semester - I")
   .and().not().like("postCategories", "*Semester - I*Semester - *")
   .and().not().contains("postCategories", "Semester - IV")
   .findAll();

如果你只想拥有那些只有第一学期的人:

realmTitles = realm
   .where(RealmTitle.class)
   .like("postCategories", "*Semester - I")
   .or().contains("postCategories", "Semester - I,")
   .and().not().like("postCategories", "*Semester - *Semester - *")
   .findAll();

推荐阅读