[英]How do I return nodes in neo4j that have a certain relationship, and then return nodes that have a different relationship with the first nodes?
我有一堆“引用”其他节点的节点。 然后,所引用的节点(refer_to是该关系)可以与另一个节点changed_to有关系。 与changed_to关系相关的那些节点也可能与另一个节点具有另一个changed_to关系。 我想返回所引用的节点,还要返回所引用的节点被更改为的节点。 我尝试了一个查询,该查询返回引用的节点并结合了一个联合,并带有一个将ReferencedNode的可选匹配项更改为ResultNode的联合,但是我认为这不会奏效,因为它只会让我获得引用的节点加上第一个更改为node的节点,之后便什么也没有首先,假设这完全可行。 如何用所描述的行为进行查询?
编辑:这是正在进行的关系的示例。 我想返回被引用的节点和被引用的节点最终成为的节点,并有一些指示符表明它最终成为了该节点。
您能否举一些您尝试过的查询示例? 这就是我的想法:
MATCH path=(n)-[:refer_to]->(o)-[:changed_to*1..5]->(p)
WHERE n.id = {start_id}
RETURN nodes(path), rels(path)
当然,我不知道您是否具有id
属性,因此可能需要更改。 另外,您start_id
在此处传递start_id
参数。
如果要返回“引用”节点和最后一个“ changed_to”节点(如果存在),则可以首先匹配已知的关系,然后以可变深度匹配可能存在的路径。 如果存在多个“ changed_to”关系,那么此时您将有多个结果项。 如果需要所有“ changed_to”节点,则可以立即返回,但是如果只希望最后一个节点,则可以按路径深度(限制为1)降序排列结果项以获取最长路径,然后返回该路径中的最后一个节点路径。 该查询可能看起来像
MATCH (n)-[:REFERENCES]->(o)
WHERE n.uid = {uid}
OPTIONAL MATCH path=o-[:CHANGED_TO*1..5]->(p)
WITH n, o, path
ORDER BY length(path) DESC
LIMIT 1
RETURN n, o, nodes(path)[-1]
这将返回起始节点,“引用”节点和
您可以在此控制台中测试查询。 它包含这三种情况下,你可以通过更换测试它们{uid}
与值高于1
, 5
和8
,以获得为三个路径的起始节点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.