领域数据库关系 - 一对多 - 如何将属性派生为master的一部分,它是链接子属性的摘要

时间:2018-05-08 01:26:15

标签: android realm realm-java

我将使用USER解释我的问题 - > TASK(1个用户可以拥有多个任务)作为示例。

在领域,我可以定义USER ENTITY,其中包含相关任务的列表。

但是,在查询所有用户时,我还想将读取作为用户列表的一部分,每个用户的一组属性是该用户任务的等效属性的摘要。

例如,我想阅读所有用户,并且对于每个用户,如果任何链接任务未完成,则报告“未完成”。如果该用户的任何任务具有附件,则为用户报告“具有附件”。

在使用SQLLite的纯SQL中,我可以使用groupby构造实现此效果,并在结果集中派生列,这些列是实列的摘要。

如何在Realm中完成相同的操作。任何帮助表示赞赏。

示例实体:

User
{
  String userId
  String name
  List<Task> tasks
  **--> oustanding** (need to derive if any of the tasks in the task list is outstanding)
  **--> hasAttachments** (if any of the tasks in the task list has 
attachments)
}

Task
{ 
    String taskId
    boolean outstanding
    boolean hasAttachments
}

注意:用户实体上的未完成和hasAttachments未定义必要的字段。我只需要在运行时,查询或动态字段中派生它们,如果有这样的事情

1 个答案:

答案 0 :(得分:0)

好消息是,Realm支持“链接查询”,从技术上来说,“至少有一个X是真的”,这正是您所寻找的:

realm.where(User.class).equalTo("tasks.outstanding", true).findAll(); // users with at least 1 outstanding task

realm.where(User.class).equalTo("tasks.hasAttachments", true).findAll(); // users with at least 1 task that has attachments