2016-04-28 5 views
0

У меня следующие отношения между двумя типами узлов (: Приложение,: Город): УстановленоIn и UsedFrom.neo4j не отображающий узел между двумя другими узлами

App InstalledIn Город App UsedFrom Город

Это означает, что приложение (Software) установлен в NewYork и используется из Лондона.

Relationships

Теперь я хочу видеть отношения (UsedFrom) между городами. Я хочу просмотр без приложений. Пользователи из города A используют аппликацию из города B. В приведенном выше примере (City London - AccessesApplicationIn NewYork)

Как я могу это понять?

ответ

0

1) Добавление данных:

MERGE (a1:App {name:'app1'}) 
MERGE (a2:App {name:'app2'}) 
MERGE (c1:City {name:'London'}) 
MERGE (c2:City {name:'New York'}) 
MERGE (a1)-[:INSTALLED_IN]->(c2) 
MERGE (a2)-[:INSTALLED_IN]->(c2) 
MERGE (a1)-[:USED_FROM]->(c1) 
MERGE (a2)-[:USED_FROM]->(c2) 

enter image description here

2) Теперь мы находим связь между городами:

MATCH (c1:City)<-[:USED_FROM]-(a:App)-[:INSTALLED_IN]->(c2:City) 
RETURN DISTINCT 'City ' + c1.name 
    + ' - [:AccessesApplicationIn] -> ' + 
     'City ' + c2.name 
AS AccessesApplicationIn 

AccessesApplicationIn:

City New York - [:AccessesApplicationIn] -> City New York 
City London - [:AccessesApplicationIn] -> City New York 

UPD:

3) Еще один вариант запроса:

MATCH path=(:City)-[r:AccessesApplicationIn]-(:City) DELETE r 
RETURN PATH 
UNION 
MATCH (c1:City)<-[:USED_FROM]-(a:App)-[:INSTALLED_IN]->(c2:City) 
MERGE path=(c1)-[:AccessesApplicationIn]->(c2) 
RETURN DISTINCT path 

enter image description here

+0

Большое спасибо - это очень хорошо работает. Что я могу сделать, чтобы получить график? – Leo

+0

@Leo Непонятно, что вам нужно. Попытайтесь описать более четко. –

+0

Моя база данных намного больше, чем пример. У нас есть серверные приложения для каждого местоположения. Как я могу избежать двойных отношений? или можно добавить свойство счетчика? Большое спасибо ... – Leo

Смежные вопросы