6

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

我会做

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

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

4

2 回答 2

8

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

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
于 2014-10-28T00:12:21.640 回答
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;

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

于 2013-10-25T17:39:50.287 回答