我有一个显示节点和关系的应用程序。显示结果后,可以通过gui添加节点和关系。当用户完成操作后,我想根据所有节点和链接的Neo4j id再次从数据库中获取所有数据(因为到目前为止我在前端没有所有数据)。对我而言,最困难的部分是,有一些“浮动”节点在gui的结果中没有关系(它们在数据库中将具有关系,但是我不希望这些关系)。值得一提的是,在我的关系中,我具有开始和结束节点ID。我本来想从那里开始,但是那时我没有这些浮动节点。 让我们看一下这个绘制效果不佳的示例图像:
如您所见:
让我们假设:
请记住,在真实数据的后面,所有这些节点之间都有更多的关系,如何通过Neo4j重新创建此图像?我尝试做类似的事情:
match path=(n)-[rels*]-(m)
where id(n) in [1, 2, 3, 4, 5]
and all(rel in rels where id in [11, 12, 13, 14])
and id(m) in [1, 2, 3, 4, 5]
return path
但是,由于多种原因,这不能正常工作。另外,仅在所有节点上进行匹配并不能获得关系。我需要合并多个查询吗?可以在1个查询中完成吗?我需要编写自己的插件吗?
我正在使用Neo4j 3.3.5。
答案 0 :(得分:1)
您不需要保留节点ID的列表。每个关系都指向其2个末端节点。由于始终需要两个末端节点,因此仅使用关系ID列表即可免费获得它们。
此查询将从关系ID列表中返回每个单一关系路径。如果您使用的是neo4j浏览器,则其可视化效果应将这些短路径编织在一起并显示原始的完整路径。
MATCH p=()-[r]-()
WHERE ID(r) IN [11, 12, 13, 14]
RETURN p
顺便说一下,所有neo4j关系都有一个方向。您可以选择在创建一个(使用MERGE
)和/或查询一个方向时不指定方向,但是它仍然具有方向。而且neo4j Browser可视化将始终显示方向。
[已更新]
如果您还希望在关系列表中包括未附加到关系的“浮动”节点,则可以仅使用单独的浮动节点ID列表。例如:
MATCH p=()-[r]-()
WHERE ID(r) IN [11, 12, 13, 14]
RETURN p
UNION
MATCH p=(n)
WHERE ID(n) IN [6]
RETURN p