让我们假设OrientDB图中的以下模型:
我有一个Profile顶点.配置文件与2个边连接:喜欢和评论.两个边都有一个" 值 "字段,表示动作的计数(或边缘的"权重").
因此,如果用户A在用户B的帖子上评论了3次,则会有一个从用户A到用户B 的评论边缘,其值为3.
现在,假设我希望获得与用户B交互的所有用户(喜欢或评论),按交互的权重排序.我可以使用以下SQL执行此操作:
select * from (traverse out from
(select out, sum(value) as value from
(traverse * from (select from Profile where username="B") while $depth < 3)
where @class="Liked" or @class="Commented" group by out order by value desc)
while $depth < 2 ) where @class="Profile" )
Run Code Online (Sandbox Code Playgroud)
但是,如果我也想知道互动的重量呢?在进行最后一次遍历时如何传播"值"?
编辑
根据该建议,此查询的简化版本将是:
select expand(out) from (
select out, sum(value) as value from (
select expand(inE("Liked", "Commented")) from Profile
where username="B"
) …Run Code Online (Sandbox Code Playgroud) orientdb ×1