需要关于密码查询的帮助

时间:2013-11-13 16:48:52

标签: neo4j cypher

我需要一些帮助才能进行密码查询。 在我的neo4j数据库中,我有通过关系节点(不是关系)链接的元素节点,我想找到从节点继承的所有节点。例如,如果我有B - > A,c - > B和D - > A,其中“ - >”意思是“继承”当我要求检索哪些元素是从A继承时,我想检索B,C和D.

我已经编写了一个cypher查询,它在单个级别上运行良好(我用节点id替换“A”):

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

此查询返回B和D但我不知道如何返回C.

有人可以帮助我吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

Cypher允许在单个关系上进行可变长度匹配,但不是您设计图表的方式。要在示例中找到节点c,您需要执行以下操作:

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