Как проверить, что цикл существует в базе данных Neo4j; - PullRequest
0 голосов
/ 23 сентября 2018

Пытаюсь изучить Neo4j, граф DB и использовать тестовую настройку, где я представляю пользователей, которые хотят торговать фруктами.

Я пытаюсь найти ситуацию, в которой существует "торговля 3-х человек" илипрямой цикл между 3 или более людьми в системе.

Это сценарий, который я пытаюсь сохранить

пользователь А имеет яблоки, хочет вишню
пользователь Б имеет бананы, хочет яблоки
пользователь С имеет вишню, хочет бананы

Таким образом, сделка возможна в вышеуказанном сценарии, если в ней участвуют 3 стороны.Мне нужен запрос, который будет возвращать имена трейдеров / людей.

Нужна помощь в представлении этого и написании кода, чтобы иметь возможность решить этот запрос.Для сценария это шифр, который я использую:

(пользователь A) - [r: has] -> (яблоки) (пользователь A) - [r: хочет] -> (вишни)

(пользователь B) - [r: has] -> (бананы) (userB) - [r: хочет] -> (яблоки)

(пользователь A) - [r: has] -> (вишни) (userA) - [r: want] -> (bananas)

Также попытался использовать это: найти группу в графе Neo4j db , но этот запрос не сделалработа ..

спасибо за любую информацию, которая может помочь!

1 Ответ

0 голосов
/ 24 сентября 2018

Первоначальный подход будет выглядеть примерно так:

MATCH (userA:User)
WHERE (userA)-[:WANTS]->() AND (userA)-[:HAS]->()
MATCH (userA)-[:WANTS]->()<-[:HAS]-(userB)-[:WANTS]->()<-[:HAS]-(userC)-[:WANTS]->()<-[:HAS]-(userA)
RETURN DISTINCT userA, userB, userC

Тем не менее, вам может потребоваться настроить это в зависимости от размера вашего графика и скорости выполнения запроса на нем.

...