繁体   English   中英

如何返回neo4j中具有一定关系的节点,然后返回与第一个节点具有不同关系的节点?

[英]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]

这将返回起始节点,“引用”节点和

  • 没有“ changed_to”节点时什么都没有
  • 只有一个时的一个“ changed_to”节点
  • 当存在多个节点时,最后一个“ changed_to”节点

您可以在此控制台中测试查询。 它包含这三种情况下,你可以通过更换测试它们{uid}与值高于158 ,以获得为三个路径的起始节点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM