如何更改Neo4J中多个节点的相同属性?

如何更改Neo4J中多个节点的相同属性?,neo4j,cypher,Neo4j,Cypher,我有以下Cypher Neo4J查询,其中我尝试查找具有特定属性的3个节点并重命名它们: MATCH (u:User{uid:"418938923891"}), (ctx:Context{name:"seo_191220T1718"}), (ctx)-[:BY]->(u), (ctxk:Context{name:"kwrds_191220T1718"}), (ctxk)-[:BY]->(u), (ctxs:Context{name:"serp_191220T1718"}), (

我有以下Cypher Neo4J查询,其中我尝试查找具有特定属性的3个节点并重命名它们:

MATCH (u:User{uid:"418938923891"}), 
(ctx:Context{name:"seo_191220T1718"}), (ctx)-[:BY]->(u), 
(ctxk:Context{name:"kwrds_191220T1718"}), (ctxk)-[:BY]->(u), 
(ctxs:Context{name:"serp_191220T1718"}), (ctxs)-[:BY]->(u)  
WITH DISTINCT ctx, ctxk, ctxs 
SET ctx.name = "seo_storyn", 
ctxk.name = "kwrds_storyn", 
ctxs.name = "serp_storyn";
但是,当查询运行时,它会显示24个属性发生了更改,这可能是因为使用的
结果相乘


有没有一种更优雅、更高效的方法可以做到这一点?

这个简化版的查询应该会更新与您相同的节点。是否可能有多个节点与搜索的名称或uid值匹配

MATCH 
(ctx:Context {name:"seo_191220T1718"})-[:BY]->(u:User {uid:"418938923891"}),
(ctxk:Context {name:"kwrds_191220T1718"})-[:BY]->(u),
(ctxs:Context {name:"serp_191220T1718"})-[:BY]->(u)
SET ctx.name = "seo_storyn", 
ctxk.name = "kwrds_storyn", 
ctxs.name = "serp_storyn"
RETURN u, ctx, ctxk, ctxs
我添加了一个return子句,以便您可以看到查询匹配的模式。尝试在neo4j浏览器中运行它,然后在表视图中查看结果。这可能会让你明白为什么你会得到多个结果

您还可以将查询分解为各个部分,查看是否返回多个结果

MATCH (ctx:Context {name:"seo_191220T1718"})-[:BY]->(u:User {uid:"418938923891"}) RETURN *
MATCH (ctxk:Context {name:"kwrds_191220T1718"})-[:BY]->(u:User {uid:"418938923891"}) RETURN *
MATCH (ctxs:Context {name:"serp_191220T1718"})-[:BY]->(u:User {uid:"418938923891"}) RETURN *