2015-07-14 2 views
1

Моя схема похожа на A-> B-> C-> D есть N отношений между A и B & B до C и так далее, но существует одно общее отношение " COMMON "находится между A, B, C, D. Используя мое отношение «COMMON», я хочу получить все другие отношения между данными двумя узлами. , например. принеси мне все отношения между А до СNeo4j: Fetch Все остальные отношения между узлами

Match path = (a)-[:COMMON*]-(c) 
 
RETURN rels(path);
Над запрос получите мне все узлы между А до С, но она не будет возвращать отношения между узлами.

Итак, вот что я хочу - сначала отфильтровать данные с ОБЩИМ отношением, затем получить все другие отношения между A и C. Есть ли способ написать этот запрос с условием ИЛИ или И?

ответ

0

Попробуйте это:

Match path = (a)-[:COMMON*]-(c) 
WITH distinct a,c 
MATCH path2 = (a)-[*]-(c) 
RETURN rels(path2); 

быть более эффективным, вы можете использовать

MATCH path2 = allShortestPaths((a)-[*]-(c)) 

или

Match path = (a)-[:COMMON*]-(c) 
WITH distinct a,c, min(length(path)) as len 
MATCH path2 = (a)-[*]-(c) 
WHERE length(path2) <= len 
RETURN rels(path2); 

К сожалению, это не возможно (пока):

Match path = (a)-[:COMMON*]-(c) 
WITH distinct a,c, min(length(path)) as len 
MATCH path2 = (a)-[*..len]-(c) 
RETURN rels(path2); 
Смежные вопросы