我想根据JSON键值动态创建/更新现有Neo4j关系对象的属性(即不列出所有SET
语句(,但这会在每个更新过程中创建一个新的关系,并带有一个新id。我希望只保留一个关系。
JSON对象";properties.json";
{"prop1":"val1","prop2":"val2"}
使用动态属性进行查询,尽管创建了许多关系:
CALL apoc.load.json("properties.json") YIELD value as props
WITH props
MERGE (client:Client {name: 'Alice'})-[r:KNOWS]->(client:Client {name: 'John'})
ON CREATE
SET r = props // I want such an expression
结果(如果r已经存在(:
id> 123
prop1 val1
prop2 val2
id> 124
prop1 val1
prop2 val2
但是,当属性被静态设置时,它就可以工作了。
使用静态属性创建一个关系的查询:
...
ON CREATE
SET
r.prop1 = "val1",
r.prop2 = "val2"
// But I don’t want this explicit list
结果令人满意(如果r已经存在(:
id> 125
prop1 val1
prop2 val2
知道怎么解决这个问题吗?
这就是正确更新属性prop1和prop2的方法。没有捷径可走。
CALL apoc.load.json("properties.json") YIELD value as props
WITH props
MERGE (client:Client {name: 'Alice'})-[r:KNOWS]->(client:Client {name: 'John'})
ON CREATE
SET r.prop1 = props.prop1, r.prop2 = props.prop2
你可以做的是创建新的密码语句(例如使用python或java代码(来更新那些属性";动态地";。