首页 > 解决方案 > 子级的领域java链查询

问题描述

这是有孩子的父母样本

Parent[0].Children[0].Name = Johnson
Parent[0].Children[0].Age = 16

Parent[0].Children[1].Name = Jessica
Parent[0].Children[1].Age = 17

Parent[1].Children[0].Name = Lawson
Parent[1].Children[0].Age = 17

Parent[1].Children[1].Name = Jessica
Parent[1].Children[1].Age = 19

我只是想得到一个孩子名字杰西卡和 17 岁的父母

当我尝试

realm.where(Parent.class).beginGroup().equalTo("childrens.name","Jessica").equalTo("childrens.age","17").endGroup().findAll();

它把父母双方都还给了我,因为第二位父母有 17 岁的孩子并命名为杰西卡。我怎样才能只得到第一个父母?

标签: javarealm

解决方案


链接查询意味着“至少有一个 X 条件为真”

所以你的查询

realm.where(Parent.class)  
     .beginGroup()
     .equalTo("childrens.name","Jessica")
     .equalTo("childrens.age","17")
     .endGroup()
     .findAll();

说,

“给我父母,父母至少有一个孩子的名字叫杰西卡,并且至少有一个孩子的年龄是 17 岁”

即父母 1 和父母 2,因为他们都有一个叫 Jessica 的孩子,而且他们都有一个 17 岁的孩子。


你可以做两件事:

1.)

realm.where(Parent.class)  
     .equalTo("childrens.name","Jessica")
     .findAll()
     .where()
     .equalTo("childrens.age","17")
     .findAll();

2.) 在儿童中,定义@LinkingObjects

public class Child extends RealmObject {
    @LinkingObjects("children")
    private final RealmResults<Parent> parents = null;
}

现在您可以根据孩子进行检查:

RealmResults<Child> children = realm.where(Child.class).equalTo("name", "Jessica").equalTo("age", 17).findAll();
Child child = children.get(0);
RealmResults<Parent> parents = child.getParents(); // <-- parents of "Jessica, 17"

推荐阅读