36429

[code]

    class Dog: Object {
        dynamic var name = ""
        dynamic var age = 0
        let owners = LinkingObjects(fromType: Person.self, property: "dogs")
    }
    class Person: Object {
        dynamic var name = ""
        let dogs = List<Dog>()
    }
    
[/code]

追加したデータ

[code]

    realm.add(Person(value: ["AAA", [["taro", 1], ["pochi", 6]]]))  
    realm.add(Person(value: ["BBB", [["kuro", 1], ["hachi", 6]]]))  
    realm.add(Person(value: ["CCC", [["taro", 6], ["pochi", 6]]]))  
    realm.add(Person(value: ["DDD", [["kuro", 6], ["chibi", 6]]]))  
    
[/code]

上記のモデルとデータで。  
いくつかの特定の名前と一致し、かつ、年齢の条件と一致するdogを持つpersonを検索しようとしました。たとえば、「kuroかpochi かつ
3才以下のdogを持つperson」を検索する条件としてINを用いて次のような条件を書きました。

[code]

    let persons = realm.objects(Person.self).filter(
        NSPredicate(format: "ANY dogs.name IN %@ && ANY dogs.age <= %d", 
                    ["kuro", "pochi"], 3 )) 
    
[/code]

結果‌​に'BBB'のみを期待しているのですが、‌​'AAA'も検索されてしまいます。INを‌​どのように解釈すればいいのでしょうか？‌​  
「kuroかpochi かつ 3才以下のdogを持つperson」を検索する場合はどのような条件を記述すればいいのでしょうか？  
よろしくお願いいたします。


CC BY-SA 3.0
2017-07-16T00:47:34.277
36403
2017-07-16T17:23:26.270
2017-07-16T17:21:41.110
5519
20521
question
swift ios realm
コレクションの各要素がAND条件に合致するように検索したい


各条件で比較されるオブジェクトが同じオブジェクトでなければならないという条件を書くには、次のようにサブクエリを利用します。

[code]

    let results = realm.objects(Person.self)
        .filter("SUBQUERY(dogs, $dog, $dog.name IN %@ && $dog.age <= %d).@count > 0", ["kuro", "pochi"], 3)
    
[/code]


CC BY-SA 3.0
2017-07-16T17:23:26.270
36429
2017-07-16T17:23:26.270
5519
36403
answer