Neo4j-获取某些节点和关系
我有一个显示节点和关系的应用程序。显示结果后,可以通过gui添加节点和关系。用户完成后,我希望根据所有节点和链接的Neo4j id再次从数据库获取所有数据(因为我在前端的这一点上没有所有数据)。对我来说,困难的部分是,有一些“浮动”节点在gui的结果中没有关系(它们在数据库中有关系,但我不想要这些)。值得一提的是,在我的关系中,我有开始和结束节点id。我本来想从那里开始,但是我没有这些浮动节点。 让我们来看看这张画得不好的例子: 如你所见:Neo4j-获取某些节点和关系,neo4j,cypher,Neo4j,Cypher,我有一个显示节点和关系的应用程序。显示结果后,可以通过gui添加节点和关系。用户完成后,我希望根据所有节点和链接的Neo4j id再次从数据库获取所有数据(因为我在前端的这一点上没有所有数据)。对我来说,困难的部分是,有一些“浮动”节点在gui的结果中没有关系(它们在数据库中有关系,但我不想要这些)。值得一提的是,在我的关系中,我有开始和结束节点id。我本来想从那里开始,但是我没有这些浮动节点。 让我们来看看这张画得不好的例子: 如你所见: 节点1链接(无方向)到节点2 节点2链接到节点3(
- 节点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
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
我希望从数据库中获取与前端显示完全相同的数据。想象一下,通过在前端执行的一个操作,您有一些节点和关系,然后再执行一些操作,您会在前端获得一些额外的新节点。所有这些节点和关系,现在我想在一个查询中得到它们。我明白你的观点,它是完全有效的。但是,这并不考虑我的“浮动”节点。我可能会将此作为备份解决方案,以获得这些节点之间的关系,然后是剩余的浮动节点。哦,我不知道您还想要一些“浮动”节点。请参阅我的最新答案。