OrientDB包含连接到特定顶点

时间:2016-10-24 15:14:31

标签: orientdb orient-sql

我有以下情况:

       (p:p1)
  V1 ---E1---\ 
              \
               V2 (with properties)
              /
  V1 ---E1---/
       (p:p2)

因此,类V1的两个顶点连接到另一个V2类型的顶点,两个边都属于同一类E1,其属性为“p”。

我想要一个查询:

  • 瞄准V1实例(通过摆脱)
  • 读取边缘类E1
  • 连接到所选V1的所有V2记录(包括所有属性)
  • 还包括返回文档中连接E1边缘的属性p。

我尝试过:

SELECT *,in('E1')[p] as p FROM (SELECT EXPAND(out('E1')) FROM <V1-rid>) UNWIND p

但是,由于投影从两个E1边缘返回值,因此当然会得到2个结果。我只想在我选择的V1和V2之间形成边缘。

我还需要包含其他与V2的连接,但我想更精确地指出问题,以减少问题的复杂性,我认为(希望)它们不会干扰答案。

更新

澄清:

我希望结果是带有附加属性“p”的整个V2记录,因此如果V2具有属性v2p1:,v2p2,结果记录应如下所示:

{
   "v2p1": <value>,
   "v2p2": <value>,
   "p": <value>
}

最后一个“p”值来自边缘,其他属性来自实际的V2记录。

2 个答案:

答案 0 :(得分:4)

您可以使用此查询

SELECT FROM (
MATCH {CLASS:v1, AS:v1, WHERE: (@rid=#29:0)}.outE('e1'){AS:e1}.inV('e1'){AS:v2} RETURN v1, e1.p, v2 
) 

我希望这很清楚。

答案 1 :(得分:2)

试试这个:

select *,traversedEdge(-1).p as p from(traverse outE('E1'),inV('E1') from #21:0) where @class='V2'