我有neo4j数据库,有数百万个类型的人节点,我想删除所有人节点的特定属性。我尝试使用匹配查询来实现它,但它正在扫描所有节点。
这是我试过的查询。
MATCH (p:Person)
REMOVE p.fatherName
此查询是否还有其他快速替代方法,
答案 0 :(得分:4)
无法通过Cypher提高该查询的性能。
您可以尝试避免没有fatherName属性的节点
MATCH (p:Person)
WHERE HAS (p.fatherName)
REMOVE p.fatherName
还有什么可以帮助添加LIMIT并多次运行查询
MATCH (p:Person)
WHERE HAS (p.fatherName)
WITH p LIMIT 100000
REMOVE p.fatherName
我建议你写Unmanaged Extension来删除该属性。
e.g。
Label nodeLabel = DynamicLabel.label("Person");
String propertyName = "fatherName";
try(Transaction tx = database.beginTx()) {
final ResourceIterator<Node> people = database.findNodes(nodeLabel);
for (Node person : IteratorUtil.asCollection(people)) {
if (person.hasProperty(propertyName)) {
person.removeProperty(propertyName);
}
}
tx.success();
}