OrientDB 消息未读计数

OrientDB messages unread count

目前我的 OrientDB 数据库中有以下图表:

其中包含以下属性:

'

基本上 User 可以是所谓的 Thread 的一部分,这是由 IsMember 边设置的。如果他们是成员,他们可以向线程发送 Message

IsMember 边缘内还有一个 last_read 属性 类型的 DateTime,这是他们最后一次打开线程的日期。因此,如果我们尝试获取所有具有较新 created_at 的消息,我们将获得所有未读消息。完成此操作的查询可能如下所示 (cluster 12=users 14=thread):

SELECT * FROM Message 
    let $LR = (select lastRead.asLong() from IsMember where in = #12:1320782 AND out = #14:705856)
WHERE in = #14:705856 AND out = #12:1320782 AND created_at.asLong() > $LR[0].lastRead

这很好,但是我想显示所有线程的未读计数器。对用户所属的所有线程使用此查询在某些情况下会使用多达 200-300 个查询。

所以基本上我正在寻找一个能够获取用户所属的所有线程的所有未读消息的查询。

额外有用的查询: 获取用户所有订阅线程的查询看起来像这样:

select expand(out) from (
  select * from IsMember where in = 12:1320782
)

查询以从给定的用户和线程

中获取 lastRead 属性
select lastRead.asLong() from IsMember where in = #12:1320782 AND out = #14:705856

试试这个查询

select in.nick as user ,out.title as thread ,$a.size() as count from IsMember
let $a=(select created_at from Message where out.nick=$parent.current.in.nick and in.title=$parent.current.out.title and created_at > $parent.current.last_read)