Как показать отношения необязательным образом в neo4j? - PullRequest
0 голосов
/ 11 июля 2020

У меня есть несколько узлов и отношений в neo4j, некоторые узлы имеют глубину отношений как 4, а некоторые - 2. Я использую HTTP API neo4j для получения данных в формате графика

Пример запроса:

MATCH p= (n:datasource{resource_key:'ABCD'})-[:is_dataset_of]-(c:dataset)-[q]-(v:dataset_columns)-[s]-(b:component)-[w]-(e:dashboard) return p

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

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

Если вы действительно хотите, чтобы путь был возвращен, вы можете сделать что-нибудь в этих строках, используя apo c (https://neo4j-contrib.github.io/neo4j-apoc-procedures/3.4/nodes-relationships/path-functions/)

MATCH requiredPath=(n)-[r]->(m)
OPTIONAL MATCH optionalPath = (m)-[q]->(s)
RETURN apoc.path.combine(requiredPath,optionalPath) AS p
0 голосов
/ 11 июля 2020

Вот один способ:

MATCH p = (:person1 {hobby: 'gamer'})-[:knows]-(:person2)
RETURN p
UNION ALL
MATCH p = (:person1 {hobby: 'gamer'})-[:knows]-(:person2)--(:person3)
RETURN p

Предложение UNION объединяет результаты двух запросов. А опция ALL указывает UNION не беспокоиться об удалении повторяющихся результатов (поскольку два подзапроса никогда не будут давать одинаковые пути).

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