2013-11-13 2 views
1

Мне нужна помощь для выполнения запроса cypher. В моих базах данных neo4j у меня есть узлы элементов, которые связаны узлами отношения (не отношения), и я хотел бы найти все узлы, которые наследуют от узла. Например, если у меня есть B -> A, c -> B и D -> A, где "->" означает "inherit", я хотел бы получить B, C и D, когда я попрошу восстановить, какие элементы наследуется от А.нужна помощь по запросу cypher

Я уже написал Cypher запрос, который хорошо работает на одном уровне (где я заменить «а» по идентификатору узла):

Start 
node=node(A) 
match 
(node)-[:IS_SOURCE_OF]->relation<-[:IS_TARGET_OF]-target 
where 
relation.relationType="INHERIT" 
return target.uuid 

Этот запрос возвращает B и D, но я не знаю, как вернуть C также.

Помогает ли кто-нибудь мне помочь?

Большое спасибо

ответ

0

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

Start node=node(A) 
match (node)-[:IS_SOURCE_OF]->(r1)<-[:IS_TARGET_OF]-()-[:IS_SOURCE_OF]->(r2)<-[:IS_TARGET_OF]-(target) 
where 
r1.relationType="INHERIT" AND r2.relationType="INHERIT" 
return target.uuid 

Однако вы должны сделать шаг назад и пересмотреть, если вы не можете моделировать отношения наследования явно - в этом случае один запрос перехватывает все наследуемые узлов из

start node=node(a) 
match node-[:INHERITS*]->target 
return target.uuid 
Смежные вопросы