领域嵌套查询[Android]

时间:2017-06-04 10:32:40

标签: android realm

我有一个相当简单的问题,但似乎无法找到答案。我有3个领域对象 - 月,日和目标。月份包含天数列表,每天包含目标列表。这是简化版本:

class Month extends RealmObject {
    RealmList<Day> days;
}

class Day extends RealmObject {
    RealmList<Goal> goals;
}

class Goal extends RealmObject {
    //some data
}

如何查询属于特定月份的目标?

那是 - 我可以获得特定月份的天数列表,但现在从那个天数列表中我需要提取它们包含的所有目标,并使用查询。感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用inverse relationships:

模型看起来像:

class Month extends RealmObject {
    String name;
    RealmList<Day> days; 
}

class Day extends RealmObject {
    String name;
    RealmList<Goal> goals; 

    @LinkingObjects("days")
    final RealmResults<Month> month = null;
}

class Goal extends RealmObject {
    String name;

    @LinkingObjects("goals")
    final RealmResults<Day> day = null;
}

查询将如下:

RealmResults<Goal> = realm
    .where(Goal.class)
    .equalTo("day.month.name", "august")
    .findAll();

如果您有100个月,每个都有100天,每个目标有100个目标(总共100万个目标),您的查询将在Realm中执行约300毫秒,在OrmLite(SQLite ORM)中执行约900毫秒。我在OnePlus 3T上进行了测试。