带有连接的领域链接查询



与Realm几乎相同的问题,复杂的链接查询,但有一个重要的变体:

在官方文件中,https://realm.io/docs/java/latest/#link-查询-这里有一个如何选择"棕色"狗的主人和"蓬松"狗的所有者的例子。不是,正如前一个问题中所写的,"Brown Fluffy"dogs,因为代码示例没有实现连词。

所以我的问题是:如何让只有"棕色"one_answers"蓬松"狗的人(这两种情况都发生在同一只狗身上(?在给定示例的数据的情况下,这仅仅是U2。文档中的第二个代码示例添加了第三个过滤器"Yellow",所以答案似乎是正确的,但在同一个Dog的字段上仍然没有连词。以下是我在文档中的尝试:

// returns both U1 and U2, because U1 owns a Brown dog, and U2 a Fluffy
RealmResults<Person> r1 = realm.where(Person.class)
.equalTo("dogs.name", "Fluffy")
.equalTo("dogs.color", "Brown")
.findAll();
// returns both U1 and U2, because U1 has a Fluffy but it is red, and has also a brown dog (Fido)
RealmResults<Person> r2 = realm.where(Person.class)
.equalTo("dogs.name", "Fluffy")
.findAll()
.where()
.equalTo("dogs.color", "Brown")
.findAll();

我需要检查数组中子元素上的条件的结合。我需要将其实现为查询,以填充适配器。Realm有可能吗?

我梦想着一种新的条件分组,它允许在列表字段的项目上指定几个条件,比如:

RealmResults<Person> r3 = realm.where(Person.class)
.beginFilterAny("dogs") // keep only Persons whose at least one dog satisfy:
.equalTo("name", "Fluffy")
.equalTo("color", "Brown")
.endFilterAny()
.findAll();

您可以定义一个反向关系,并按名称和颜色查询狗。然后,您可以对狗进行迭代并找到主人。

在满足这些条件的情况下对Dog.class使用查询,这样您就拥有了所有的Brown and Fluffy狗。迭代结果以提取所有狗的主键,并在Person.class上的查询中使用它来检索拥有至少一只狗的所有人。

//get all brown and fluffy dogs
RealmResults<Dog> dogs = realm.where(Dog.class)
.equalTo("name", "Fluffy")
.equalTo("color", "Brown")
.findAll();
//extract dogs id
Set<UUID> dogIds = dogs.stream()
.map(d -> d.getId().toString())
.collect(Collectors.toSet());
//find all brown and fluffy dogs owners
RealmResults<Person> persons = realm.where(Person.class)
.in("dogs.id", dogIds.toArray(new String[dogIds.size()]))
.findAll();

最新更新