2012-06-27 2 views
6

Я копирую часть моего основного Neo4j Graph (mainDB) в другой график (dupDB), делая это, как я могу создать узел в dupDB, который имеет аналогичные свойства, как один в mainDB.Как создать дублирующий узел из узла в Neo4j?

Я бы

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

Теперь я должен копировать каждое свойство в основном для Dup вручную, есть ли способ из одной строки, чтобы сделать это?

+0

Вы просто дублируете узел и свойства или даже его отношения, например. подграф? Как правило, выполняйте копирование, перейдя по реквизитам, с помощью Cypher вы можете использовать одну карту в качестве параметра для ее вставки, см. Http://docs.neo4j.org/chunked/snapshot/query-create.html#create-create- single-node-from-map –

+0

Только объекты. Во всяком случае, я скопировал их вручную, было просто любопытно, был ли прямой метод. – Sravan

+1

нет нет. –

ответ

2

Я не думаю, что это существовало год назад. Однако сегодня это может решить проблему.

Neo4j оболочка имеет команду дамп: 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; 

Вы могли бы взять на себя выход из этого и отправить его в другую базу данных для создания этих узлов, свойства и все.

3

Вы можете создать дубликат с картой в Ne04j 2.1 (не уверен ранее)

match (n:Node {name: 'abc'}) 
with n as map 
create (copy:Node) 
set copy=map return copy 

Если у вас есть ограничение уникальности на какой-либо из свойств она не будет выполнена, хотя с сообщением ...

узел уже существует с меткой XX и "собственность" собственность = [значение]

Вы может избежать этого, предоставив новое значение для свойства с ограничением уникальности, создав новый узел и скопировав другие нестандартные значения свойств из исходного узла.

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