Neo4J Cypher - 如果不再找到 Json 源文件,则删除现有节点
Neo4J Cypher - Delete existing Node if Json source file no longer found
我目前每天将包含 json 个文件的目录加载到我的 neo4j 数据库中。
如果数据库中已经存在一个文件ID,我什么也不做,如果有新的文件ID,我创建新的节点,如果目录中不再存在文件名ID,那么我想删除匹配的节点身份证.
对于 apoc.load.json
我正在使用 failOnError:false
这样脚本就不会在任何文件不再存在因此无法加载时失败。
我尝试了各种示例来传递丢失文件的 ID,即它 returned 为 null,但到目前为止我想出的最好的是下面的仍然没有删除所需的节点,因为当错误发生时它会移动到下一个要加载的文件。
这是一个片段,在此之后还有进一步的创建代码:
UNWIND range(1,100) as id
WITH DISTINCT id + ".json" as file,id
CALL apoc.load.json("file:///output/"+file, null, {failOnError:false})
YIELD value
WITH value,id
CALL apoc.do.when(value is not null, "RETURN value",
"MATCH (n:File {FileId: id}) DETACH DELETE n", {value:value, id:id}) YIELD value as v
RETURN v
有没有办法捕获 failOnError 并在此时处理 Cypher 以便能够删除所需的节点?[=15=]
这里有类似的查询:
https://github.com/neo4j-contrib/neo4j-apoc-procedures/issues/1149
我也尝试过将 collect/coalesce 与 return 结合使用,但这也不起作用。
感谢您的帮助!
我已经测试了代码,当load.json
程序失败时,似乎没有办法得到一张空地图。也许打开另一个功能请求并解释您的问题。同时,我建议执行以下操作作为解决方法。
首先,为所有文件节点添加二级标签。
MATCH (f:File)
SET f:Delete
然后 运行 您的代码并根据需要更新文件,最后从具有源文件的文件节点中删除辅助标签:
UNWIND range(1,100) as id
WITH DISTINCT id + ".json" as file,id
CALL apoc.load.json("file:///output/"+file, null, {failOnError:false})
YIELD value
WITH value,id
MATCH (n:File {FileId: id})
REMOVE n:Delete
do some updates etc...
然后一旦完成,删除所有在此过程中不匹配的节点
MATCH (d:Delete)
DETACH DELETE d
我目前每天将包含 json 个文件的目录加载到我的 neo4j 数据库中。
如果数据库中已经存在一个文件ID,我什么也不做,如果有新的文件ID,我创建新的节点,如果目录中不再存在文件名ID,那么我想删除匹配的节点身份证.
对于 apoc.load.json
我正在使用 failOnError:false
这样脚本就不会在任何文件不再存在因此无法加载时失败。
我尝试了各种示例来传递丢失文件的 ID,即它 returned 为 null,但到目前为止我想出的最好的是下面的仍然没有删除所需的节点,因为当错误发生时它会移动到下一个要加载的文件。 这是一个片段,在此之后还有进一步的创建代码:
UNWIND range(1,100) as id
WITH DISTINCT id + ".json" as file,id
CALL apoc.load.json("file:///output/"+file, null, {failOnError:false})
YIELD value
WITH value,id
CALL apoc.do.when(value is not null, "RETURN value",
"MATCH (n:File {FileId: id}) DETACH DELETE n", {value:value, id:id}) YIELD value as v
RETURN v
有没有办法捕获 failOnError 并在此时处理 Cypher 以便能够删除所需的节点?[=15=]
这里有类似的查询: https://github.com/neo4j-contrib/neo4j-apoc-procedures/issues/1149 我也尝试过将 collect/coalesce 与 return 结合使用,但这也不起作用。
感谢您的帮助!
我已经测试了代码,当load.json
程序失败时,似乎没有办法得到一张空地图。也许打开另一个功能请求并解释您的问题。同时,我建议执行以下操作作为解决方法。
首先,为所有文件节点添加二级标签。
MATCH (f:File)
SET f:Delete
然后 运行 您的代码并根据需要更新文件,最后从具有源文件的文件节点中删除辅助标签:
UNWIND range(1,100) as id
WITH DISTINCT id + ".json" as file,id
CALL apoc.load.json("file:///output/"+file, null, {failOnError:false})
YIELD value
WITH value,id
MATCH (n:File {FileId: id})
REMOVE n:Delete
do some updates etc...
然后一旦完成,删除所有在此过程中不匹配的节点
MATCH (d:Delete)
DETACH DELETE d