如何在Neo4j中复制路径?

如何在Neo4j中复制路径?,neo4j,cypher,Neo4j,Cypher,我想在Neo4j中重新创建一个完整的节点链和关系链 我知道我可以使用p=保存路径,但CREATE不接受此选项 MATCH p=(:Person)-[*]->(:Dog) CREATE p 有办法做到这一点吗?正如您所看到的,您尝试的语法不起作用,因此必须尝试编写大量密码来复制每个路径的所有部分 然而,事实证明,目前不可能单独使用Cypher来复制任意路径,因为缺少一些必要的功能。 例如,尽管可以使用LABELS()函数获取包含现有节点标签的集合,但无法从该数据创建/设置另一个节点的标签。

我想在Neo4j中重新创建一个完整的节点链和关系链

我知道我可以使用
p=
保存路径,但
CREATE
不接受此选项

MATCH p=(:Person)-[*]->(:Dog) CREATE p

有办法做到这一点吗?

正如您所看到的,您尝试的语法不起作用,因此必须尝试编写大量密码来复制每个路径的所有部分

然而,事实证明,目前不可能单独使用Cypher来复制任意路径,因为缺少一些必要的功能。


例如,尽管可以使用
LABELS()
函数获取包含现有节点标签的集合,但无法从该数据创建/设置另一个节点的标签。Cypher仅支持硬编码标签(在创建节点时,如
CREATE(n:Foo)
;在更新节点时,如
SET n:Foo
)。类似的考虑也适用于关系类型。

正如您所看到的,您尝试的语法不起作用,因此必须尝试编写大量密码来复制每个路径的所有部分

然而,事实证明,目前不可能单独使用Cypher来复制任意路径,因为缺少一些必要的功能。

例如,尽管可以使用
LABELS()
函数获取包含现有节点标签的集合,但无法从该数据创建/设置另一个节点的标签。Cypher仅支持硬编码标签(在创建节点时,如
CREATE(n:Foo)
;在更新节点时,如
SET n:Foo
)。类似的考虑也适用于关系类型

警告:通常会创建与节点的附加关系,而不是在图形数据库中复制节点

这不是严格意义上的密码,但在中有效。它应该从Neo4j 2.0.0开始工作。警告:这是一个实验性的、不完整的特性

dump MATCH (pers:Person)-[r*:OWNS]->(d:Dog) RETURN pers,r,d;
您可以直接执行返回的输出以复制节点。如果ID已经存在,则将对其进行更改。将使用相同的标签和属性创建节点和关系

这对于备份数据库非常方便

警告:通常会创建与节点的附加关系,而不是在图形数据库中复制节点

这不是严格意义上的密码,但在中有效。它应该从Neo4j 2.0.0开始工作。警告:这是一个实验性的、不完整的特性

dump MATCH (pers:Person)-[r*:OWNS]->(d:Dog) RETURN pers,r,d;
您可以直接执行返回的输出以复制节点。如果ID已经存在,则将对其进行更改。将使用相同的标签和属性创建节点和关系

这对于备份数据库非常方便


您可以尝试使用
节点(p)
关系(p)
您能解释一下为什么要在同一数据库中创建一组路径的精确副本吗?这通常是你想要避免的事情。如果我们知道你真正想要完成什么,也许我们可以建议一个更好的方法。@cybersam太正确了,人们通常希望避免这种情况。在我的例子中没关系,我正在填充样本数据,这样就可以有重复的数据。有其他方法填充样本数据,但这是一个理论问题。我有点惊讶,我尝试的命令不起作用。一个“不可能”的答案是完全可以接受的,或者如果有一种方法可以做到这一点,那么知道它会很有趣。无论采用哪种方式,答案都可能伴随着一个“警告:您可能不想这样做”,正如您所提到的。@cybersam我有一个这样的用例,我想重复使用一组节点作为“模板”(并且有多个模板),复制并附加到其他地方。现在,我正在使用py2neo以编程方式创建它们,并从cypher脚本文件中读取CREATE命令,但是完全在db上操作会很好。您可以尝试使用
节点(p)
关系(p)
您能解释一下为什么要在同一db中创建一组路径的精确副本吗?这通常是你想要避免的事情。如果我们知道你真正想要完成什么,也许我们可以建议一个更好的方法。@cybersam太正确了,人们通常希望避免这种情况。在我的例子中没关系,我正在填充样本数据,这样就可以有重复的数据。有其他方法填充样本数据,但这是一个理论问题。我有点惊讶,我尝试的命令不起作用。一个“不可能”的答案是完全可以接受的,或者如果有一种方法可以做到这一点,那么知道它会很有趣。无论采用哪种方式,答案都可能伴随着一个“警告:您可能不想这样做”,正如您所提到的。@cybersam我有一个这样的用例,我想重复使用一组节点作为“模板”(并且有多个模板),复制并附加到其他地方。现在我正在使用py2neo以编程方式创建它们,并从cypher脚本文件中读取CREATE命令,但是完全在db上操作会很好。目前正在验证是否有一种非常简单的方法无法实现这一点。如果我找到了,我会把它寄出去。如果没有,我会接受你的回答。目前正在验证是否有一个相当简单的方法无法实现这一点。如果我找到了,我会把它寄出去。如果没有,我会接受你的回答。