web-dev-qa-db-ja.com

Neo4jノードが存在する場合はプロパティを追加/更新

できるようになりたいupdate/enlarge私のNeo4jデータベースは、そのデータベースの新しいバージョンをアップロードすることによってORそのデータベースの一部です。

私が見つけたもののうち、MERGEからaddまでの新しいノードがまだ存在しない場合でも、それらを使用できます。しかし、そのプロセスで、既存のノードに新しいプロパティが存在しない場合に、どのようにしてaddという新しいプロパティをスリム化するにはどうすればよいですか?

私は、ノードがある場合は'John' of 'Age:34' and 'Hair:brown'とアップロード'John'/'Age:34'/'Coat:Yellow'-どうすれば取得できますか'John'/'Age:34'/'Hair:brown'/'Coat:Yellow'

13
user1806627

John(または主要な識別属性)でノードをマージできます。そして、マージが成功した後でプロパティを設定します。

すべての属性のマップを使用して、それらを一度に設定できます

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

属性agecoatを置き換えたいだけなら、代わりにこれを行うことができます。

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

または、地図として追加することもできます

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

MERGEは、ノードが後で存在することを保証します(一致または作成されます)。ノードを作成したくない場合は、代わりにMATCHを使用する必要があります。 (「ノードが存在する場合」と言うので、作成しないでください)

最も簡単な方法は

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

マッチが失敗した場合、彼らはSETに対して何もしません。

後も行を保持したいと仮定します。 (より複雑なクエリの場合)一致をオプションにすることができます

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

この場合も、一致が失敗した場合、nはnullになり、SETは何もしません。

1
Tezra