如何从Neo4j中的节点创建重复节点?

Sra*_*van 6 neo4j

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

我会做

Node main = mainDB.getNodeByID(477);
Node dup = dupDB.createNode();
Run Code Online (Sandbox Code Playgroud)

现在我必须手动将main中的每个属性复制到dup,是否有任何单行方法来执行此操作?

Dav*_*ett 6

您可以在Neo4j 2.1中创建带有地图的副本(不确定之前的版本)

MATCH (n:Node {name: 'abc'}) 
WITH n AS map 
CREATE (copy:Node) 
SET copy=map
RETURN copy
Run Code Online (Sandbox Code Playgroud)

如果您对任何属性都具有唯一性约束,则将出现以下消息,但它将失败:

节点已经存在,标签为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
Run Code Online (Sandbox Code Playgroud)


小智 3

我认为一年前不存在这种情况。然而,这可能会解决今天的问题。

Neo4j shell 有一个转储命令: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;
Run Code Online (Sandbox Code Playgroud)

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