仅在给定条件下在foreach中创建节点

时间:2014-08-11 13:24:59

标签: neo4j

出于版本控制的目的,我希望在我的数据库中有VERSION个节点。仅当size节点的属性FILE发生更改时,才应创建此节点及其关系。 FILE节点应始终包含size的当前值。由于在MATCH中无法使用WHEREforeach,如何使这种情况有效?有没有像" If-Clause"与foreach一起使用?

MERGE (root:FOLDER {fullpath: {newRoot}.fullpath})
ON CREATE SET root={newRoot}
FOR EACH (newFile IN {newFiles} | 
     MERGE (file:FILE {fullpath:newFile.fullpath}) ON CREATE SET file.guid = newFile.guid 
     SET file.visited = 1
     MERGE (root)-[:CONTAINS]->(file) 

以下两行只应在file.size != newFile.size(尺寸更改)

时执行
    SET file.size = newFile.size 
    CREATE (file)-[:HASVERSION{v:1}]->(v:VERSION {size:newFile.size})

我希望你明白我想要达到的目标。如果有更好的节点版本控制解决方案,请提供建议。

1 个答案:

答案 0 :(得分:2)

fadanner,

这是我找到的。这也适用于我给你的早期答案(而不是FOREACH)。

MERGE (root:FOLDER {fullpath: {newRoot}.fullpath})
ON CREATE SET root={newRoot}
WITH root UNWIND {newFiles} AS newFile
MERGE (file:FILE {fullpath : newFile.fullpath})
ON CREATE SET file.guid = newFile.guid
SET file.visited = 1
MERGE (root)-[:CONTAINS]->(file)
WITH file, newFile
WHERE file.size <> newFile.size
CREATE (file)-[:HASVERSION {v : 1}]->(v:VERSION {size : newFile.size})

这比我测试的简单示例更复杂,因此可能存在错误。但看看这样的事情是否能解决你的问题。

恩典与和平,

吉姆