出于版本控制的目的,我希望在我的数据库中有VERSION
个节点。仅当size
节点的属性FILE
发生更改时,才应创建此节点及其关系。 FILE
节点应始终包含size
的当前值。由于在MATCH
中无法使用WHERE
和foreach
,如何使这种情况有效?有没有像" 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})
我希望你明白我想要达到的目标。如果有更好的节点版本控制解决方案,请提供建议。
答案 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})
这比我测试的简单示例更复杂,因此可能存在错误。但看看这样的事情是否能解决你的问题。
恩典与和平,
吉姆