2016-02-07 15 views
7

Desidero essere in grado di update/enlarge il mio database Neo4j caricando una versione più recente di tale database O parte di tale database.Neo4j Aggiunge/aggiorna le proprietà se il nodo esiste

Di quello che ho trovato, posso usare MERGE a add nuovi nodi solo se non esistono già. Ma in quel processo, come faccio a dimagrire con le nuove proprietà add su quel nodo esistente se non esistono?

I e, se ho un nodo 'John' of 'Age:34' and 'Hair:brown' e caricare 'John'/'Age:34'/'Coat:Yellow' - come ottengo 'John'/'Age:34'/'Hair:brown'/'Coat:Yellow'.

risposta

13

È possibile unire il nodo su John (o l'attributo di identificazione principale). E quindi impostare le proprietà dopo l'unione riuscita.

Si potrebbe metterli tutti in una volta con una mappa per tutti gli attributi

merge (n:Node {name: 'John'}) 
set n = {name: 'John', age: 34, coat: 'Yellow', hair: 'Brown'} 
return n 

Se si voleva solo per sostituire gli attributi età e cappotto, si potrebbe fare questo, invece.

merge (n:Node {name: 'John'}) 
set n.age = 34, n.coat = 'Yellow' 
return n 

Oppure si potrebbe aggiungerlo come una mappa troppo

merge (n:Node {name: 'John'}) 
set n += {age: 34, coat: 'Yellow'} 
return n 
+0

grazie molto! sembra promettente :) giusto per chiarire: se imposto una proprietà su un nodo che ha già quella proprietà, può ottenerne due? John può avere due età, entrambe su 34? se imposto 5 proprietà su un nodo, diventano tutte le proprietà di quel nodo, io le proprietà "other" vengono cancellate? – user1806627

+1

Negli attributi verrà sostituito con ciò che fornisci. Nel primo esempio l'intera voce verrà sostituita dalle coppie attributo/valore nella mappa. Nell'esempio successivo verranno toccati solo quegli attributi specificati; si noti l'uso dell'operatore di assegnazione composto ('+ =') nel terzo esempio. Non finirai con due età se imposti un'età e ne esiste già una. Per riuscirci dovresti prima fare un po 'di più. –

+0

Come si può unire con il nome dei multipli? – Vinod