如何在Neo4j中从一个Node创建一个Duplicate Node?

mw3dktmi  于 2023-10-18  发布在  其他
关注(0)|答案(3)|浏览(120)

我正在将我的Main Neo4j Graph(mainDB)的一部分复制到另一个Graph(dupDB)中,同时如何在dupDB中创建一个与mainDB中的节点具有相似属性的节点。
我会做

Node main = mainDB.getNodeByID(477);
Node dup = dupDB.createNode();

现在我必须手动将main中的每个属性复制到dup中,有没有单行方法可以做到这一点?

06odsfpq

06odsfpq1#

您可以在Neo4j 2.1中使用Map创建副本(不确定早期版本)

MATCH (n:Node {name: 'abc'}) 
WITH n AS map 
CREATE (copy:Node) 
SET copy=map
RETURN copy

如果你有一个唯一性约束的任何属性,它将失败,虽然与消息.

  • 节点已存在,标签为XX,属性“property”=[value]*

您可以通过为具有唯一性约束的属性提供新值、创建新节点并从原始节点复制其他非唯一属性值来避免这种情况。

MATCH (n:Node {name: 'abc'}) 
WITH n as map 
CREATE (copy:Node {name: 'def'}) 
SET copy.property1 = map.property1
, copy.property2 = map.property2
RETURN copy
atmip9wb

atmip9wb2#

我不认为这是一年前。但这可能解决今天的问题。
Neo4j shell有一个dump命令:http://docs.neo4j.org/chunked/preview/shell-commands.html#_dumping_the_database_or_a_cypher_result_to_cypher_statements

dump START n=node({self}) MATCH (n)-[r]-(m) return n,r,m;

然后,您可以将其输出并将其发送到另一个数据库以创建这些节点,属性等。

vnjpjtjt

vnjpjtjt3#

现在,APOC库中有用于克隆节点的函数,例如参见Neo4j Docs - Clone nodes
一个来自docs的例子:

MATCH (f:Foo{name:'Foo'}),(b:Bar{name:'Bar'})
CALL apoc.refactor.cloneNodes([f,b])
YIELD input, output, error
RETURN *

您还可以克隆具有关系的节点,克隆节点时跳过属性等。

相关问题