OrientDB Включить свойство от ребра, связанного с определенной вершиной
У меня есть следующий случай:
(p:p1)
V1 ---E1---\
\
V2 (with properties)
/
V1 ---E1---/
(p:p2)
Таким образом, две вершины класса V1 связаны с другой вершиной типа V2, оба ребра принадлежат одному и тому же классу E1, обладающему свойством "p".
Я хотел бы запрос, который:
- Предназначен для экземпляра V1 (от RED)
- Считывает все записи V2 (включая все свойства), которые связаны с выбранным V1 классом ребер E1
- Также включает в себя свойство p от соединительного E1-ребра в возвращаемых документах.
Я пытался с:
SELECT *,in('E1')[p] as p FROM (SELECT EXPAND(out('E1')) FROM <V1-rid>) UNWIND p
Но это, конечно, даст 2 результата, так как проекция возвращает значения от обоих ребер E1. Я только хочу, чтобы p сформировал край между моими выбранными V1 и V2.
У меня также есть несколько других подключений к V2, которые необходимо включить, но я хотел более точно указать проблему, чтобы уменьшить сложность вопроса, и я думаю (надеюсь), что они не помешают ответу.
Обновить
Разъяснение:
Я хотел бы, чтобы результатом были целые V2-записи с добавленными свойствами "p", поэтому, если V2 имеет свойства v2p1:, v2p2, результирующие записи должны выглядеть примерно так:
{
"v2p1": <value>,
"v2p2": <value>,
"p": <value>
}
Где последнее значение "p" от края, а другие свойства от фактических записей V2.
2 ответа
Попробуй это:
select *,traversedEdge(-1).p as p from(traverse outE('E1'),inV('E1') from #21:0) where @class='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
)
Я надеюсь, что это достаточно ясно.