Realm query with List

后端 未结 4 1422
-上瘾入骨i
-上瘾入骨i 2020-12-19 01:37

I\'m using realm to store my data on Android. Awesome framework! Now the only problem I\'m now having is:

I got a array list strings with id\'s of Countries in my da

相关标签:
4条回答
  • 2020-12-19 02:09

    To match a field against a list of values, use in. For example, to find the names “Jill,” “William,” or “Trillian”, you can use in("name", new String[]{"Jill", "William", "Trillian"}). The in predicate is applicable to strings, binary data, and numeric fields (including dates).

    Doc.-> https://realm.io/docs/java/latest#queries

    0 讨论(0)
  • 2020-12-19 02:23

    In latest version of Realm 7+, you can use anyOf to match a field against a list of values.

    anyOf("name", new String[]{"Jill", "William", "Trillian"})
    

    in older versions, use in instead of anyOf and with kotlin use oneOf instead of in.

    see this issue

    0 讨论(0)
  • 2020-12-19 02:24

    What you want to do is possible with link queries in theory (searching for "country.id"), however link queries are slow. Also you'd need to concatenate a bunch of or() predicates together, and I would not risk that with a link query.

    I would recommend using the following

    public class Drinks extends RealmObject {
        @PrimaryKey
        private String id;
        private String name;
        private Country country;
        @Index
        private String countryId;
    }
    
    public class Country extends RealmObject {
        @PrimaryKey
        private String id;
        private String name;
    }
    

    And when you set the Country in your class, you also set the countryId as country.getId().

    Once you do that, you can construct such:

    RealmQuery<Drinks> drinkQuery = realm.where(Drinks.class);
    int i = 0;
    for(String id : ids) {
        if(i != 0) {
            drinkQuery = drinkQuery.or();
        }
        drinkQuery = drinkQuery.equalTo("countryId", id);
        i++;
    }
    return drinkQuery.findAll();
    
    0 讨论(0)
  • 2020-12-19 02:25

    Since the Realm database has added RealmQuery.in() with the version 1.2.0

    I suggest using something like this.

    //Drinks
    public class Drinks extends RealmObject {
    @PrimaryKey
    private String id;
    private String name;
    private String countryId;
    
    //getter and setter methods
    }
    
    //Country
    public class Country extends RealmObject {
        @PrimaryKey
        private String id;
        private String name;
    
    //getter and setter methods
    }
    

    The code to use inside activity/fragments to retrieve drink list

    String[] countryIdArray = new String[] {"1","2","3"} //your string array
    RealmQuery<Drinks> realmQuery  = realm.where(Drinks.class)
                .in("countryId",countryIdArray);
    RealmResults<Drinks> drinkList = realmQuery.findAll();
    
    0 讨论(0)
提交回复
热议问题