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 
) 

Я надеюсь, что это достаточно ясно.

Другие вопросы по тегам