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

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

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

我创建了数据模型,如下面的屏幕截图所示。

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

enter image description here

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

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

如何复制子图?

我正在创建一个python模块,所以试图避免apoc。

neo4j cypher py2neo
1个回答
2
投票

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

对于非APOC方法,您需要完成以下操作:

  1. 与构成要克隆的子图的不同节点和关系匹配。每个单独的列表将使这更容易处理。
  2. 克隆节点,并获得从原始节点映射到克隆节点的方法。
  3. 处理关系,查找开始和结束节点,然后跟踪到克隆节点的映射,然后使用克隆节点为关系的起始节点和结束节点创建相同的关系类型,然后从原始关系复制属性。这样,您与原始文件没有任何关系,只与克隆有任何关系。
  4. 确定要重新锚定的节点(您可能不想克隆原始节点),对于进出该节点的任何关系,将其创建(通过步骤3)到要用作新锚点的节点(例如,new:File应该是克隆目录树的父级)。

所有这些在Cypher中都很难做到(特别是第3步和第4步),因此所有这些都被封装在apoc.refactor.cloneSubgraph()中。

© www.soinside.com 2019 - 2024. All rights reserved.