Neo4j Cypher(使用bolt)一次执行多个不相关的查询-在单个查询中匹配和修改多个节点(设置属性)
我有5个不同标签的节点,例如,Neo4j Cypher(使用bolt)一次执行多个不相关的查询-在单个查询中匹配和修改多个节点(设置属性),neo4j,cypher,Neo4j,Cypher,我有5个不同标签的节点,例如,A、B、C、D、E。我需要根据某个属性匹配每种类型的节点,并更新匹配节点的其他属性 如果我执行5个不同的match和set查询,每个标签类型一个查询,那么查询就可以很好地工作 但是,当我尝试在一个查询中完成所有操作时,属性似乎会被更新多次。我正在更新的属性是一个数组(相同的值被多次添加到数组中)。以下是我尝试执行的查询: match (a:A {a: "abc"}) match (A {a: "abc"})-[RELATED_TO*]-(b:B {b:"def"}
A、B、C、D、E
。我需要根据某个属性匹配每种类型的节点,并更新匹配节点的其他属性
如果我执行5个不同的match和set
查询,每个标签类型一个查询,那么查询就可以很好地工作
但是,当我尝试在一个查询中完成所有操作时,属性似乎会被更新多次。我正在更新的属性是一个数组(相同的值被多次添加到数组中)。以下是我尝试执行的查询:
match (a:A {a: "abc"})
match (A {a: "abc"})-[RELATED_TO*]-(b:B {b:"def"})
match (c:C {c: "lmn"})
match (d:D {d: "pqr"})
match (e:E {e: "xyz"})
set a.prop=a.prop+"123"
set b.prop=b.prop+"123"
set c.prop=c.prop+"123"
set d.prop=d.prop+"123"
set e.prop=e.prop+"123"
问题是,当我执行上述查询时,属性数组prop
会多次添加123
。这是因为我的match
语句的结果是多个的,并且相同的set语句运行了那么多次。如果是这样的话,有人能建议我在一个查询中最好的方法吗
我希望在单个查询中执行此操作的原因是,我使用Bolt协议从远程应用程序发送cypher查询,并且我不希望发送5个不同的查询
[编辑:添加一个简单示例]
考虑以下DB中所有5个节点的简单布置:
当我在此设置上运行上述查询时,假设属性prop
以前是空数组,则运行查询后的属性值如下:
A.prop = ["123", "123", "123", "123", "123", "123", "123", "123"] // added 8 times
B.prop = ["123", "123", "123", "123", "123", "123", "123", "123"] // added 8 times
C.prop = ["123", "123", "123", "123"] // added 4 times
D.prop = ["123", "123", "123", "123"] // added 4 times
E.prop = ["123", "123", "123", "123"] // added 4 times
然而,预期的结果应该是:
A.prop = ["123"] // added 1 time
B.prop = ["123"] // added 1 time
C.prop = ["123"] // added 1 time
D.prop = ["123"] // added 1 time
E.prop = ["123"] // added 1 time
[编辑2]我发现了一个类似的问题,但不是令人满意的答案。我相信从远程应用程序一次发送多个不相关的查询要比一个接一个地发送(从应用程序的角度来看)“属性数组属性被多次添加”。在所有情况下,或仅在A和B实体中。理想情况下,考虑添加一个表,希望得到的结果和所观察到的结果。谢谢,刚刚更新了我的问题“属性数组PROP得到123次多次添加”。在所有情况下,或仅在A和B实体中。理想情况下,考虑添加一个表,希望得到的结果和所观察到的结果。谢谢,刚刚更新了我的问题。