与Realm, complex linked query几乎相同的问题,但有一个重要的变化形式:
在官方文档https://realm.io/docs/java/latest/#link-queries中,有一个示例,说明了如何选择“布朗”狗的主人和“蓬松”狗的主人。并非如前一个问题中所述,“棕色蓬松”犬是这样,因为代码示例未实现连接。
所以我的问题是:如何只让拥有“棕色”和“蓬松”狗的狗(同时在同一只狗上都处于条件下)?给定示例数据,仅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();
我需要检查数组中子元素的条件合取。我需要将其实现为查询,以填充适配器。境界有可能吗?
我梦of以求的是一种新的条件分组,它允许在List字段的项目上指定多个条件,例如:
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();
答案 0 :(得分:0)
您可以定义inverse relationship并按名称和颜色查询狗。然后,您可以遍历狗并获得主人。
答案 1 :(得分:0)
在符合这些条件的情况下对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();