OrientDB 包括 属性 从连接到特定顶点的边
OrientDB Include property from edge connected to specific vertex
我有以下情况:
(p:p1)
V1 ---E1---\
\
V2 (with properties)
/
V1 ---E1---/
(p:p2)
所以 class V1 的两个顶点连接到 V2 类型的另一个顶点,两条边都是相同的 class E1,它具有 属性 "p"。
我想要一个查询:
- 以 V1 实例为目标(通过 rid)
- 读取通过边 class E1
连接到所选 V1 的所有 V2 记录(包括所有属性)
- 还在返回的文档中包含来自连接 E1 边缘的 属性 p。
我试过:
SELECT *,in('E1')[p] as p FROM (SELECT EXPAND(out('E1')) FROM <V1-rid>) UNWIND p
但这当然会给出 2 个结果,因为来自两个 E1 边缘的投影 returns 值。我只想包含 p 形成我选择的 V1 和 V2 之间的边缘。
我还有一些与 V2 的其他联系需要包括在内,但我想更精确地指定问题以降低问题的复杂性,我认为(希望)它们不会干扰答案。
更新
澄清:
我希望结果是具有附加属性 "p" 的整个 V2 记录,因此如果 V2 具有属性 v2p1:、v2p2,则生成的记录应该类似于:
{
"v2p1": <value>,
"v2p2": <value>,
"p": <value>
}
其中最后一个 "p" 值来自边缘,其他属性来自实际的 V2 记录。
您可以使用此查询
SELECT FROM (
MATCH {CLASS:v1, AS:v1, WHERE: (@rid=#29:0)}.outE('e1'){AS:e1}.inV('e1'){AS:v2} RETURN v1, e1.p, v2
)
我希望已经足够清楚了。
试试这个:
select *,traversedEdge(-1).p as p from(traverse outE('E1'),inV('E1') from #21:0) where @class='V2'
我有以下情况:
(p:p1)
V1 ---E1---\
\
V2 (with properties)
/
V1 ---E1---/
(p:p2)
所以 class V1 的两个顶点连接到 V2 类型的另一个顶点,两条边都是相同的 class E1,它具有 属性 "p"。
我想要一个查询:
- 以 V1 实例为目标(通过 rid)
- 读取通过边 class E1 连接到所选 V1 的所有 V2 记录(包括所有属性)
- 还在返回的文档中包含来自连接 E1 边缘的 属性 p。
我试过:
SELECT *,in('E1')[p] as p FROM (SELECT EXPAND(out('E1')) FROM <V1-rid>) UNWIND p
但这当然会给出 2 个结果,因为来自两个 E1 边缘的投影 returns 值。我只想包含 p 形成我选择的 V1 和 V2 之间的边缘。
我还有一些与 V2 的其他联系需要包括在内,但我想更精确地指定问题以降低问题的复杂性,我认为(希望)它们不会干扰答案。
更新
澄清:
我希望结果是具有附加属性 "p" 的整个 V2 记录,因此如果 V2 具有属性 v2p1:、v2p2,则生成的记录应该类似于:
{
"v2p1": <value>,
"v2p2": <value>,
"p": <value>
}
其中最后一个 "p" 值来自边缘,其他属性来自实际的 V2 记录。
您可以使用此查询
SELECT FROM (
MATCH {CLASS:v1, AS:v1, WHERE: (@rid=#29:0)}.outE('e1'){AS:e1}.inV('e1'){AS:v2} RETURN v1, e1.p, v2
)
我希望已经足够清楚了。
试试这个:
select *,traversedEdge(-1).p as p from(traverse outE('E1'),inV('E1') from #21:0) where @class='V2'