0

我将使用 USER -> TASK (1-user-can-have-many-tasks) 作为示例来解释我的问题。

在领域中,我可以定义用户实体,其中包括相关任务的列表。

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

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

在带有 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 不是必需的定义字段。如果有这样的事情,我只需要在运行时、查询或动态字段中派生它们

4

1 回答 1

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
于 2018-05-08T07:29:43.470 回答