我有一个包含数百万个人类型节点的neo4j数据库,我想删除所有person节点的特定属性。我尝试使用match查询来实现它,但它正在扫描所有节点。
这是我尝试过的查询:
MATCH (p:Person)
REMOVE p.fatherName
还有没有其他快速替代这个查询的方法?
我有一个包含数百万个人类型节点的neo4j数据库,我想删除所有person节点的特定属性。我尝试使用match查询来实现它,但它正在扫描所有节点。
这是我尝试过的查询:
MATCH (p:Person)
REMOVE p.fatherName
还有没有其他快速替代这个查询的方法?
无法通过Cypher查询来提高该查询的性能。
您可以尝试避免没有fatherName属性的节点。
MATCH (p:Person)
WHERE HAS (p.fatherName)
REMOVE p.fatherName
MATCH (p:Person)
WHERE HAS (p.fatherName)
WITH p LIMIT 100000
REMOVE p.fatherName
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();
}
AllNodesScan
),它只应该获取带有该标签的节点(NodeByLabelScan
)。如果实际上正在扫描所有节点,请分享EXPLAIN
或PROFILE
的结果(请参见https://dev59.com/kWIj5IYBdhLWcg3wGRmN#31534005)。 - jjaderberg