Получить все узлы из отношений, содержащихся в списке - PullRequest
0 голосов
/ 30 июня 2018

Прежде всего, английский не мой родной язык, поэтому я не был полностью уверен, как сказать вам, что мне нужно. Я надеюсь, что это описание делает его лучше.

У меня есть график в neo4j, содержащий два типа этикеток: коктейли и ингредиенты. они связаны отношением под названием: СОДЕРЖАТЬ.

Пример:

(: коктейль {имя: "джин тоник"}) - [: СОДЕРЖИТ] - (: ингредиент {имя: "джин"} (: коктейль {имя: "джин тоник"}) - [: СОДЕРЖИТ] - (: ингредиент {имя: "тоник вода"}

Теперь мой вопрос: я хочу ввести список ингредиентов и вывести все возможные коктейли из этого списка. Проблема в том, как мне получить все эти коктейли, даже те, которые не содержат ВСЕХ ингредиентов, представленных в списке?

Пример ввода:

"джин", "тоник", "водка"

Пример вывода:

"тоник вода" <- "джин тоник" -> "джин"

заранее спасибо!

1 Ответ

0 голосов
/ 30 июня 2018

Сначала вам нужно пройти список ингредиентов и получить список всех возможных коктейлей. И тогда выбирайте только те коктейли, все ингредиенты которых есть в списке ингредиентов:

WITH ["gin","tonic water","vodka", "lemon"] AS ingredientNames

UNWIND ingredientNames AS ingredientName
MATCH (c:cocktail)-[:CONTAINS]-(i:ingredient {name: ingredientName})

WITH c, 
     collect(DISTINCT i) AS ingredients
MATCH (c)-[:CONTAINS]->(i:ingredient)

WITH c, ingredients,
     collect(DISTINCT i) AS ingredientsTest
     WHERE SIZE(ingredients) = SIZE(ingredientsTest)

RETURN c AS cocktail,
       ingredients
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...