Neo4j 删除重复节点检查特定键是否具有相同的值
在my db中,有些节点具有以下形式:Neo4j 删除重复节点检查特定键是否具有相同的值,neo4j,cypher,Neo4j,Cypher,在my db中,有些节点具有以下形式: n:Contact { "name": "name surname", "created_timestampe": 1460411261, "updated_timestamp": 1494083876, "contact_point": [ "+39*********" ] } 但有些节点的键名和触点的值是重复的。我不关心创建的\u时间戳或更新的\u时间戳,但我想删除这些重复项,检查contact\u p
n:Contact
{
"name": "name surname",
"created_timestampe": 1460411261,
"updated_timestamp": 1494083876,
"contact_point": [
"+39*********"
]
}
但有些节点的键名和触点的值是重复的。我不关心创建的\u时间戳或更新的\u时间戳,但我想删除这些重复项,检查contact\u point值是否真的相同。
我写了这个,但我不确定它是否正确:
MATCH (c:Contact)
WITH c.contact_point AS contact_point, COLLECT(c) AS contacts
WHERE SIZE(contacts) > 1
FOREACH (n IN contacts| DETACH DELETE n);
您可能不想删除所有重复项。要仅保留其中一个,请改为这样做(只要您确定可以删除要删除的重复项的所有关系): 请注意,
WHERE SIZE(contacts)>1
测试是不必要的,因为如果contacts
只有一个元素,那么contacts[1..]
将是一个空列表
你可以用
c.name做类似的事情
我认为它很有效,非常感谢!那么,我是否应该执行两个查询,一个用于c.name,另一个用于c.contact\u point?但是,contact_point key的值是一个数组,有时两个、三个或更多contact节点具有相同的名称,但contact_point具有两个或三个包含另一个节点的contact_point值的值。在这种情况下我能做什么?你需要在你的问题中弄清楚这两个属性是如何关联的。现在根本不清楚制约因素是什么。
MATCH (c:Contact)
WITH c.contact_point AS cp, COLLECT(c) AS contacts
FOREACH (n IN contacts[1..] | DETACH DELETE n);