Как получить и вершины, и значение ребра в neptune db

Я новичок в Neptune DB, я создал вершины и соединил две вершины с ребрами, и я дал некоторые свойства как ребру, так и значению.

Я хочу получить значения свойств ребер и вершин

Может ли кто-нибудь предоставить мне образец запроса для этого?

Заранее спасибо.

Например: Вершины: p1, P2, p3 Ребра E1, соединяющие P1 и P2, E2- соединяющие P2 и P3 Свойство вершин: имя Свойство ребра: отношение

Теперь мне нужно вывести имя и отношение для всех вершин, связанных с P1.


person Ragul M B    schedule 16.09.2019    source источник
comment
Ваш вопрос очень расплывчатый. Можете ли вы предоставить образец графика, начальную вершину или свойство и ожидаемый результат?   -  person Kfir Dadosh    schedule 17.09.2019


Ответы (1)


path шаг - это то, что вы ищете. Используя модулятор by, вы можете выбирать свойства циклически, то есть вершинно-ребро.

Начнем с определения вершины p1:

g.V().hasLabel("testV").has("name","p1")

Повторите обход по ребрам со свойством "Relationship":

.repeat(outE("testE").has("relation").inV()).until(__.not(outE("testE")))

Получите обход path (или tree) и выберите «имя» для вершин и «отношение» для ребер с помощью модулятора by:

.path().by("name").by("relation")

Чтобы увидеть результаты в виде массивов строк:

.local(unfold().fold())

Обратите внимание, что этот обход не обрабатывает циклы, но это другой вопрос.


Если вам нужны соседи только первого уровня, вы можете использовать другой подход:

g.V().hasLabel("testV").has("name","p2").bothE()
.project("relation","name")
.by(values("relation"))
.by(otherV().values("name"))
person Kfir Dadosh    schedule 17.09.2019
comment
могу я связать это - person Ragul M B; 18.09.2019
comment
g.V (). hasLabel (testV) .has (имя, p1) .bothE (). otherV (). path (). by (имя) .by (отношение) - person Ragul M B; 18.09.2019
comment
какой из них лучше, и кто-нибудь может объяснить, почему? - person Ragul M B; 18.09.2019
comment
Конечно, вы можете, но вы получите только соседей первого уровня, поэтому в вашем примере это будет только p2, и вы не получите p3. - person Kfir Dadosh; 18.09.2019
comment
пока мне нужен только первый уровень. - person Ragul M B; 18.09.2019
comment
Результат, который я получаю, поскольку ответ json слишком сложен, можем ли мы получить только такие значения, как p1 Relationship dad, возможно ли это, потому что в ответ я получаю путь и значение, которые мне не нужны - person Ragul M B; 18.09.2019
comment
Смотрите мой обновленный ответ. Буду признателен, если вы примете ответ. - person Kfir Dadosh; 18.09.2019
comment
Спасибо за ответ, при подходе к обновлению, если я больше, чем при условии, я получаю сообщение об ошибке. g.V().hasLabel("testV").has("name",within("p2","p3")).bothE() .project("relation","name") .by(values("relation")) .by(otherV().values("name")) Если вы можете помочь этому, тоже будет здорово - person Ragul M B; 18.09.2019
comment
Вероятно, не все ребра имеют свойство отношения или вершины имеют свойство имени. Вы можете обойти это, добавив has('relation') перед проектом и coalesce для проекции имени. - person Kfir Dadosh; 18.09.2019
comment
Спасибо за помощь - person Ragul M B; 18.09.2019
comment
Я работаю с большим объемом данных, поэтому запрос выполняется медленно, как мне оптимизировать запрос g.V().hasLabel("testV").has("name","p1").bothE().otherV().path().by("name").by("relation") - person Ragul M B; 23.09.2019
comment
Пожалуйста, откройте новый вопрос и поделитесь информацией о том, сколько вершин и ребер в вашем графе, сколько соседей первого уровня, версия движка БД и т. Д. Путь стоит дорого, поэтому, возможно, лучше использовать другой предложенный мной подход. - person Kfir Dadosh; 24.09.2019