【发布时间】:2015-03-19 14:38:24
【问题描述】:
我想在 OrientDB 图形数据库中查询一个顶点来获取二级顶点,保持中间的顶点 id。
这种关系可以这样表示:
User <--edge--> User <--edge--> User
(1) (2) (3)
对于用户 1,我想获得所有用户 3(2 条边的距离),但我想保留所有用户 2 的摆脱。方向不重要(会使用both()方法遍历)
一个例子:
#10:1 <--edge--> #10:2
#10:1 <--edge--> #10:3
#10:2 <--edge--> #10:4
#10:2 <--edge--> #10:5
#10:3 <--edge--> #10:6
对于上面的示例,#10:1 的查询应该返回:(不知道如何更好地表示这个,但是查询应该返回来自 User 类的对象和来自中间 User 的摆脱)
User(#10:4), #10:2
User(#10:5), #10:2
User(#10:6), #10:3
从第二级查找顶点的查询如下:select expend(both('edge').both('edge')) from #10:2(当然查询可以通过设置函数和其他条件进行优化,以防输出用户的相互关系)。对于这个输出,我想看到一个额外的字段(属性/列,无论你想怎么称呼它),我可以在其中看到这种关系的中间顶点。
希望有人可以帮助我,告诉我您是否需要更多信息,或者如果您不明白某些内容。谢谢。
更新:
我发现了它应该如何完成,但它不起作用(我相信这是某种错误,报告了它,我现在正在等待答案)。
应该工作的查询看起来像这样:
select *,$id from (select both('edge') from (select from (select both('edge') from <rid>) let $id = @rid))
当然查询可以优化(少子查询),但是为了逻辑,我这样表述。
查询的问题是,例如上面所说的,所有的$id 值都是#10:3,因为它是记录的最后一个值。 LET 子句不会将单个值指向每条记录,而是将最后一个值与所有记录相关联(正如我在示例中提到的那样)。
也许我错了,这不是一个错误,如果有人对此有所了解,希望你能帮助我。如果这是一个错误,我愿意接受解决该问题的建议。谢谢。
【问题讨论】:
标签: orientdb