美文网首页
realm连接查询

realm连接查询

作者: Pino | 来源:发表于2019-04-23 09:00 被阅读0次
可以查询链接或关系。考虑下面的模型:
  public class Person extends RealmObject {
  private String id;
  private String name;
  private RealmList<Dog> dogs;
  // getters and setters
}

public class Dog extends RealmObject {
  private String id;
  private String name;
  private String color;
  // getters and setters
}`</pre>

每个`Person`对象都有多个狗关系,如下表所示:
现在,我们可以找到具有链接查询的特定人员:
RealmResults<Person> persons = realm.where(Person.class)
                                .equalTo("dogs.color", "Brown")
                                .findAll();`</pre>

字段名称`equalTo`是*通过关系*的*路径,*使用句点(`.`)作为分隔符。上面的查询显示“查找所有拥有颜色为棕色的狗的人。”请注意,结果将包含至少有一个匹配的对象的*所有* `Dog`对象:`Person``Dog`
persons.get(0).getDogs(); // => [A,B]
persons.get(1).getDogs(); // => [B,C,D]`</pre>

请记住,我们正在寻找拥有特定种类狗的人,而不是真正的狗。

让我们深入挖掘一下:
RealmResults<Person> r1 = realm.where(Person.class)
                             .equalTo("dogs.name", "Fluffy")
                             .equalTo("dogs.color", "Brown")
                             .findAll();

// r2 => [U2]
RealmResults<Person> r2 = realm.where(Person.class)
                             .equalTo("dogs.name", "Fluffy")
                             .findAll()
                             .where()
                             .equalTo("dogs.color", "Brown")
                             .findAll()
                             .where()
                             .equalTo("dogs.color", "Yellow")
                             .findAll();`</pre>

第一个问题是:“找到所有有狗名为'蓬松' *并且*有颜色为'布朗'的狗的人。”第二个问题是:“找到所有有狗名为'蓬松'的人。” 在该结果集中,找到所有拥有颜色为“棕色”的狗的人。然后,在该结果集中,找到所有拥有颜色为“黄色”的狗的人。“因此,第一个查询找到两组人员并返回这些集合的交集; 第二个查询以不同的方式运行,通过获取每个查询的结果集`findAll`并将其提供给下一个`where`查询来连续缩小结果范围。您可以通过链接重写第二个查询:
RealmResults<Person> set1 = realm.where(Person.class).equalTo("dogs.name", "Fluffy").findAll();
RealmResults<Person> set2 = set1.where(Person.class).equalTo("dogs.color", "Brown").findAll();
RealmResults<Person> set3 = set2.where(Person.class).equalTo("dogs.color", "Yellow").findAll();`</pre>

使用反向关系,您可以扩展查询的可能性。让我们考虑相同的两个模型类,`Person`和`Dog`。`Person`您可以先查询狗,而不是使用反向关系,而不是启动查询。

 RealmResults<Dog> brownFluffies = realm.where(Dog.class).equalTo("color", "Brown").equalTo("name", "Fluffy").findAll();
for (Dog brownFluffy : brownFluffies) {
    RealmResults<Person> owners = brownFluffy.getOwners();
    // ...
}`</pre>

您还可以使用具有反向关系的链接查询:
 RealmResults<Dog> dogs = realm.where(Dog.class).equalTo("persons.name", "Jane").findAll();`</pre>

相关文章

  • realm连接查询

  • (二)三大组件

    一 Realm Realm:域,Realm 充当了 Shiro 与应用安全数据间的“桥梁”或者“连接器”。 也就是...

  • mysql连接查询,自关联,子查询

    mysql支持三种类型的连接查询,分别为:内连接查询,左连接查询,右连接查询 内连接查询: 左连接查询: 右连接查...

  • mysql-数据查询语句-多表

    连接查询 连接查询,是关系数据库中最主要的查询,包括等值查询、自然连接查询、非等值查询、自身连接查询、外连接查询和...

  • 2018-02-23

    创建异步查询 RealmResultsresult=realm.where(User.class).equalTo...

  • python学习笔记-数据库06_连接查询

    连接查询可以实现多表的查询,当查询的字段数据来自不同的表就可以使用连接查询来完成连接查询可以分为:内连接查询左连接...

  • EF Core 备忘

    模糊查询sql linq 内连接查询sql linq 左连接查询sql linq 左连接查询(连接内带条件)sql...

  • mysql的用法3

    -- ==============连接查询==================-- 1.连接查询: 同时查询多个表...

  • Mysql--连接查询和子查询

    连接查询和子查询 一、连接查询 1.1 概念 连接查询:也可以叫跨表查询,需要关联多个表进行查询 1.2 根据年代...

  • shiro认证:连接数据库操作doGetAuthenticati

    5.13.1 需求修改realm的doGetAuthenticationInfo,从数据库查询用户信息,real...

网友评论

      本文标题:realm连接查询

      本文链接:https://www.haomeiwen.com/subject/kcdmgqtx.html