Как получить все узлы на определенном расстоянии? - PullRequest
0 голосов
/ 08 апреля 2020

Я в настоящее время начинающий с Neo4J.

Мой график на данный момент выглядит так: My graph

Я хочу получить всех пользователей ( красные узлы) от определенного пользователя с определенного расстояния. Допустим, я хочу всех пользователей с расстоянием 2 от «Антуана». В настоящее время у меня есть этот запрос:

MATCH (u1:User {firstname: 'Antoine'})-[:PARTICIPATE]->(e1:Event)<-[:PARTICIPATE]-(u2:User)-[:PARTICIPATE]->(e2:Event)<-[:PARTICIPATE]-(u3:User)
RETURN u3

Есть ли способ добавить некоторую универсальность в этот запрос? Если я хочу, чтобы все пользователи были на большем расстоянии, запрос был бы грязным ...

Я думаю, что это неправильный способ сделать это. Есть ли лучший способ достичь моей цели?

1 Ответ

1 голос
/ 08 апреля 2020

Вам необходимо использовать сопоставление с образцом переменной длины .

С вашим графиком вам нужно пройти отношения 2: PARTICIPATE, чтобы перейти к другому: узлу пользователя, поэтому мы можем express смежные пользователи (через один соединительный узел), такие как:

MATCH (u1:User {firstname: 'Antoine'})-[:PARTICIPATE*2]-(u2:User)
RETURN u2

И чтобы получить пользователей на еще одном удаленном уровне, например:

MATCH (u1:User {firstname: 'Antoine'})-[:PARTICIPATE*4]-(u3:User)
RETURN u3

Мы можем получить набор обоих, используя диапазон для шаблона переменной длины, от 2 до 4 прыжков включительно:

MATCH (u1:User {firstname: 'Antoine'})-[:PARTICIPATE*2..4]-(user:User)
RETURN user
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...