1

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

我已经编写了一个在单个级别上运行良好的密码查询(我将“A”替换为节点 ID):

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

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

有人可以帮助我吗?

非常感谢

4

1 回答 1

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
于 2013-11-13T17:03:09.413 回答