Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j-获取某些节点和关系_Neo4j_Cypher - Fatal编程技术网

Neo4j-获取某些节点和关系

Neo4j-获取某些节点和关系,neo4j,cypher,Neo4j,Cypher,我有一个显示节点和关系的应用程序。显示结果后,可以通过gui添加节点和关系。用户完成后,我希望根据所有节点和链接的Neo4j id再次从数据库获取所有数据(因为我在前端的这一点上没有所有数据)。对我来说,困难的部分是,有一些“浮动”节点在gui的结果中没有关系(它们在数据库中有关系,但我不想要这些)。值得一提的是,在我的关系中,我有开始和结束节点id。我本来想从那里开始,但是我没有这些浮动节点。 让我们来看看这张画得不好的例子: 如你所见: 节点1链接(无方向)到节点2 节点2链接到节点3(

我有一个显示节点和关系的应用程序。显示结果后,可以通过gui添加节点和关系。用户完成后,我希望根据所有节点和链接的Neo4j id再次从数据库获取所有数据(因为我在前端的这一点上没有所有数据)。对我来说,困难的部分是,有一些“浮动”节点在gui的结果中没有关系(它们在数据库中有关系,但我不想要这些)。值得一提的是,在我的关系中,我有开始和结束节点id。我本来想从那里开始,但是我没有这些浮动节点。 让我们来看看这张画得不好的例子:

如你所见:

  • 节点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
然而,由于多方面的原因,这并不能正常工作。而且,仅仅在所有节点上匹配并不能得到关系。我需要合并多个查询吗?这可以在一个查询中完成吗?我需要自己写插件吗


我使用的是Neo4j 3.3.5。

您不需要保留节点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

我希望从数据库中获取与前端显示完全相同的数据。想象一下,通过在前端执行的一个操作,您有一些节点和关系,然后再执行一些操作,您会在前端获得一些额外的新节点。所有这些节点和关系,现在我想在一个查询中得到它们。我明白你的观点,它是完全有效的。但是,这并不考虑我的“浮动”节点。我可能会将此作为备份解决方案,以获得这些节点之间的关系,然后是剩余的浮动节点。哦,我不知道您还想要一些“浮动”节点。请参阅我的最新答案。