您好,我想删除所有带有标签GRAPH_OBJECT的节点,它们的属性值(让我们称之为myprop)不在我列出的数值列表中CSV或文本文件。Neo4J用Cypher删除字段值不带CSV的节点
我如何用Cypher完成这项工作?
您好,我想删除所有带有标签GRAPH_OBJECT的节点,它们的属性值(让我们称之为myprop)不在我列出的数值列表中CSV或文本文件。Neo4J用Cypher删除字段值不带CSV的节点
我如何用Cypher完成这项工作?
这应该工作。
// load csv
LOAD CSV FROM "file://values.txt" AS row
// create a collection of the first column turned into numeric values
WITH collect(toInt(row[0])) AS blacklist
// find the nodes
MATCH (node:GRAPH_OBJECT)
// for any of the properties of the node, if it's value is in our blacklist
WHERE ANY(property in keys(node) WHERE node[property] IN blacklist)
// delete node and relationships
DETACH DELETE node;
与迈克尔饥饿的代码开始,并与您的评论的更新,我相信这应该工作:
// load csv
LOAD CSV FROM "file://values.txt" AS row
// create a collection of the first column turned into numeric values
WITH collect(toInt(row[0])) AS whitelist
// find the nodes
MATCH (node:GRAPH_OBJECT)
// for any of the properties of the node, if it's value is in our blacklist
WHERE NOT node.myprop IN whitelist)
// delete node and relationships
DETACH DELETE node;
第一个WHERE子句中迈克尔的代码(WHERE ANY(property in keys(node)
)似乎只是有这么每个属性上该节点可以搜索,所以如果你只需要搜索myprop,那么这不应该需要。
谢谢。我认为查询应该是白名单而不是黑名单,我们希望删除不在白名单中的任何节点(标签为GRAPH_OBJECT)。同样在我的情况下,它是一个特定的属性值'myprop',所以我改变这个:“WHERE ANY(属性在键(节点)WHERE节点[属性] IN黑名单)”:“WHERE node.'myprop' NOT IN白名单” ? – lordmj