在neo4j中同时更新多个具有相同标签的节点

Update more than one nodes with the same label at the same time in neo4j

如何在 neo4j.I 中同时更新具有相同标签的这三个节点尝试了以下但它不起作用。

方法一:

START n=node(0) 
MATCH n-[r:HAS_GRADE]->(g:Grade)-[r1:HAS_SYLLABUS]->(sy:Syllabus)
OPTIONAL MATCH (sy)-[:HAS_CHILD]->(s:Subject) SET s:Publish WITH s
OPTIONAL MATCH (s)-[:HAS_CHILD]->(c:Chapter) SET c:Publish WITH c
OPTIONAL MATCH (c)-[:HAS_CHILD]->(t:Topic) SET t:Publish 
RETURN s;

方法二

    START n=node(0) 
    MATCH n-[r:HAS_GRADE]->(g:Grade)-[r1:HAS_SYLLABUS]->(sy:Syllabus)
    OPTIONAL MATCH (sy)-[:HAS_CHILD]->(s:Subject)
    OPTIONAL MATCH (s)-[:HAS_CHILD]->(c:Chapter)
    OPTIONAL MATCH (c)-[:HAS_CHILD]->(t:Topic) WITH s,c,t
    SET s:Publish  
    SET c:Publish
    SET t:Publish
    RETURN s;

方法三

START n=node(0) 
MATCH n-[r:HAS_GRADE]->(g:Grade)-[r1:HAS_SYLLABUS]->(sy:Syllabus)
OPTIONAL MATCH (sy)-[:HAS_CHILD]->(s:Subject)
OPTIONAL MATCH (s)-[:HAS_CHILD]->(c:Chapter)
OPTIONAL MATCH (c)-[:HAS_CHILD]->(t:Topic) WITH s,c,t
SET s:Publish, c:Publish, t:Publish
RETURN s

我是否需要 运行 此查询 3 次才能更新三个节点。或者有什么替代方法吗?请帮忙。

怎么样:

START n=node(0) 
MATCH n-[r:HAS_GRADE]->(g:Grade)-[r1:HAS_SYLLABUS]->(sy:Syllabus)-[:HAS_CHILD*]->(c)
WHERE any(x in labels(c) WHERE x in ["Subject","Chapter","Topic"])
SET c :Publish
RETURN c

WHERE 确保 HAS_CHILD 的末端节点带有列表中给定的标签之一。

我们使用可变路径长度(参见 *)和 HAS_CHILD 来获取所有子节点。