如何使用Cypher在Neo4j中复制子图

时间:2019-02-25 18:48:39

标签: neo4j cypher py2neo

我正在尝试使用Neo4j,Cypher和Python(Py2Neo)模拟文件系统。

我已经创建了数据模型,如以下屏幕截图所示。

Type = 0表示文件夹,type = 1表示文件。

enter image description here

我正在为文件/文件夹实现诸如复制,移动等功能。

移动功能看起来很简单,我可以创建一个新的关系并删除旧的关系。但是复制文件/文件夹需要复制子图。

如何复制子图?

我正在创建一个python模块,因此尝试避免apoc。

1 个答案:

答案 0 :(得分:1)

即使您试图避免使用APOC,它也已在最新版本中实现了此功能:apoc.refactor.cloneSubgraph()

对于非APOC方法,您需要完成以下任务:

  1. MATCH匹配组成要克隆的子图的不同节点和关系。每个都有一个单独的列表将使其更易于处理。

  2. 克隆节点,并获得一种从原始节点映射到克隆节点的方法。

  3. 处理关系,找到开始节点和结束节点,并遵循到克隆节点的映射,然后使用克隆节点为关系的开始节点和结束节点创建相同的关系类型,然后从原来的关系。这样,您与原始文件就没有任何关系,只有克隆物。

  4. 确定要重新锚定的节点(您可能不想克隆原始节点),对于与该节点之间的任何关系,(通过步骤3)将其创建到所需节点用作新的锚点(例如,新的:File应该是克隆的目录树的父级)。

所有这些都很难在Cypher中完成(尤其是第3步和第4步),因此所有这些原因都封装在apoc.refactor.cloneSubgraph()中。