Neo4j - 获取某些节点和关系

问题描述 投票:0回答:1

我有一个应用程序,其中显示节点和关系。显示结果后,可以通过gui添加节点和关系。当用户完成后,我想基于所有节点和链接的Neo4j id再次从数据库中获取所有数据(因为我前端没有所有数据)。对我来说困难的部分是有“浮动”节点在gui的结果中没有关系(它们在数据库中会有关系,但我不想要这些)。值得一提的是,在我的关系中,我有开始和结束节点ID。我想从那里开始,但后来我没有这些浮动节点。让我们来看看这个绘制得很糟糕的示例图像:Poorly drawn example

如你看到的:

  • 节点1与节点2链接(无方向)。
  • 节点2链接到节点3(从2到3)
  • 节点3链接到节点4(从3到4)
  • 节点3也链接到节点5(没有方向)
  • 节点6是浮点节点,没有关系

我们假设:

  • id(1和2之间的关系)= 11
  • id(2和3之间的关系)= 12
  • id(3和4之间的关系)= 13
  • id(3和5之间的关系)= 14

请记住,在真实数据背后,所有这些节点之间的关系会更多,如何通过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。

neo4j cypher
1个回答
1
投票

您不需要保留节点ID列表。每个关系都指向其2个端节点。由于您始终需要两个终端节点,因此只需使用关系ID列表即可免费获取它们。

此查询将返回关系ID列表中的每个单关系路径。如果您使用的是neo4j浏览器,它的可视化应该将这些短路径组合在一起并显示原始的完整路径。

MATCH p=()-[r]-()
WHERE ID(r) IN [11, 12, 13, 14]
RETURN p

顺便说一句,所有neo4j关系都有一个方向。您可以选择在创建方向(使用MERGE)和/或查询时指定方向,但它仍然有方向。 neo4j浏览器可视化将始终显示方向。

[更新]

如果您还想在关系列表中包含未附加到关系的“浮动”节点,则可以使用单独的浮动节点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
© www.soinside.com 2019 - 2024. All rights reserved.