【问题标题】:Realm collection query领域集合查询
【发布时间】:2016-10-04 10:51:51
【问题描述】:

我想在领域(java)中建立一个满足这个条件的查询: 所有带有类型 X 和名称如 Y 的标签的书。 这是我的领域类:

class Book extends RealmObject {

    public RealmList<Tag> tags;

    public int fileType;

    public String title;
}

class Tag extends RealmObject {

    public Book book;

    public int type;

    public String name;
}

我必须使用基于 Book 的查询,所以查询必须像这样开始:

realm.where(Book.class)

但我无法根据需要构建查询。 我试过这个:

realm.where(Book.class)
  .equalTo("tags.type", X)
  .contains("tags.name", Y)
  .findAll();

这个查询意味着任何它的 tags.type 等于 X 并且它的任何 tags.name 包含 Y 的书籍。

但我想将这两个条件应用于同一个 Tag 对象。

我该怎么做?

谢谢。

【问题讨论】:

  • 嗨hojjat。你能用另一种方式解释这个问题吗?无法弄清楚您到底在寻找什么。据我所知,您当前的查询将返回所有标签类型为 X 的书籍或包含名称 Y 的书籍。
  • 将这两个条件应用于同一个标签对象是什么意思?
  • 嗨,毗湿奴。谢谢您的回复。我的查询返回标签类型为 X 或标签名称包含 Y 的所有书籍。假设我有一本书有两个标签。像这样的第一个标签 {type = X, name = "test"} 和第二个标签:{type = Z, name = "Y"}。此查询将返回这本书作为结果,但这不是我想要的。我希望这两个条件都适用于同一个标签。

标签: android realm realm-list


【解决方案1】:

链接查询可能有点难以理解,但我们在这里有一个完整的示例和解释:https://realm.io/docs/java/latest/#link-queries

在您的情况下,您需要将其重写为:

realm.where(Book.class)
  .equalTo("tags.type", X)
  .findAll().where()
  .contains("tags.name", Y)
  .findAll();

【讨论】:

  • 谢谢克里斯蒂安。这解决了我告诉的问题。但是我还有另一个必须应用的条件,所以我必须将每个条件组包装在 beginGroup() 和 endGroup 中。但显然我应该在 findAll 方法之前关闭组。你能给出一个解决方案吗?
  • 我不完全确定我理解了这个问题,但是 if 和 beginGroup 必须与 endGroup 匹配才能成为有效的查询。
  • 我必须在 findAll 方法之后调用 endGroup,因为我还有另一个必须像这样应用的条件:realm.where(Book.class).beginGroup()....findAll().endGroup( )
  • 把它移到findAll()之前的右边:realm.where(Book.class).beginGroup()....endGroup().findAll()
  • 这是完整的查询:我想获取所有符合以下条件的书籍:(fileType == 1 和标题如“pattern”)或(fileType == 2 和标题如“pattern”)或(fileType = 1并且有一个带有(type = X and name = Y)) 的标签或者 (fileType = 2 并且有一个带有(type = X and name = Y)) 的标签
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多