web-dev-qa-db-fra.com

Neo4j Ajouter/mettre à jour les propriétés si le noeud existe

Je veux pouvoir update/enlarge ma base de données Neo4j en téléchargeant une version plus récente de cette base de données OR dans cette base de données.

De ce que j'ai trouvé, je peux utiliser MERGE pour add nouveaux nœuds, s'ils n'existent pas déjà. Mais dans ce processus, comment puis-je modifier add nouvelles propriétés de ce nœud existant si elles n'existent pas? 

Si j’ai un noeud 'John' of 'Age:34' and 'Hair:brown' et que je télécharge 'John'/'Age:34'/'Coat:Yellow' - comment puis-je obtenir 'John'/'Age:34'/'Hair:brown'/'Coat:Yellow'.

12
user1806627

Vous pouvez fusionner le nœud sur John (ou l'attribut d'identification principal). Et puis définissez les propriétés après la fusion réussie.

Vous pouvez les définir tous en même temps avec une carte pour tous les attributs

MERGE (n:Node {name: 'John'})
SET n = {name: 'John', age: 34, coat: 'Yellow', hair: 'Brown'}
RETURN n

Si vous souhaitez simplement remplacer les attributs age et coat , vous pouvez le faire à la place.

MERGE (n:Node {name: 'John'})
SET n.age = 34, n.coat = 'Yellow'
RETURN n 

Ou vous pouvez aussi l'ajouter sous forme de carte

MERGE (n:Node {name: 'John'})
SET n += {age: 34, coat: 'Yellow'}
RETURN n 
22
Dave Bennett

MERGE garantit qu'un nœud existera par la suite (qu'il soit mis en correspondance ou créé). Si vous ne voulez pas créer le nœud, vous devez utiliser MATCH à la place. (Puisque vous dites "si le noeud existe", cela implique qu'il ne devrait pas être créé)

Le plus simple est

MATCH (n{id:{uuid}) SET n.prop=true

Si le match échoue, ils n'auront rien à faire contre la SET.

En supposant que vous souhaitiez toujours avoir des lignes après; (pour une requête plus complexe) Vous pouvez simplement rendre la correspondance facultative

...
OPTIONAL MATCH (n{id:{uuid}) SET n.prop=true

Encore une fois, si la correspondance échoue, n sera nul et le SET ne fera rien

0
Tezra