Realm、複雑なリンクされたクエリとほぼ同じ質問ですが、重要なバリアントがあります:
公式ドキュメントhttps://realm.io/docs/java/latest/#link-queriesには、「茶色」の犬の所有者と「ふわふわ」の犬の所有者を選択する方法の例があります。前の質問に書かれているように、「Brown Fluffy」の犬ではありません。これは、コード例が接続詞を実現していないためです。
だから私の質問は、「茶色」と「ふわふわ」の犬(同じ犬の両方の条件)を所有している人だけを取得する方法ですか?例のデータを考えると、それは U2 だけです。ドキュメントの 2 番目のコード例では、3 番目のフィルター "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で可能ですか?
次のように、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();