正如我从另一个问题中学到的那样,单独的Cypher显然不可能复制子图或复制节点链。但我需要以某种方式做到这一点。因此,我寻找一种更加黑客的做法。
具体来说,我需要转换看起来像这样的图:
(A)──>(N1:T1)──>(B)
进入看起来像这样的图表
(A)──>(N1:T1)──>(B)
│ ^
└───>(N2:T2)────┘
虽然A
和B
之间的部分可以任意长。重要的是,T1
类型的所有节点都会转换为原始路径的副本中的T2
类型(示例中为N1
的那个)。
所以,如果我有这个图:
MERGE (N1:A)-[:r]->(N2:B)-[:r]->(N3:C)
MERGE (N1)-[:r]->(N4:C)-[:r]->(N5:C)
和一个如下所示的查询:
MATCH p=(:A)-[*0..]->(:B)-[*0..]->(:C)
RETURN p
我用graph.cypher.execute(<query>)
执行它,然后execute()
返回的记录为:
| p
---+----------------------------
1 | (:A)-[:r]->(:B)-[:r]->(:C)
现在我想获取所有节点的ID。然后我可以使用Cypher代码生成一个字符串,该代码表示复制的路径并使用execute()
再次执行。在该字符串中,我将使用记录中的节点ID连接到数据库中的现有节点。但我记得,通过ID从外部定位数据库中的节点也是不可能的......或者实际上它可能吗?还有其他方法可以解决这个问题吗?有人提到dump
功能,但文档非常缺乏,我不太明白它应该如何工作。此外,我甚至不确定它是否能满足我的需求。