Что Cypher script для удаления node по ID?
В SQL:
Delete From Person Where ID = 1;
В Cypher, что script, чтобы удалить node по ID?
(Отредактировано: ID = Neo4j внутренний node ID)
Ответы
Ответ 1
Предполагая, что вы ссылаетесь на внутренний Neo4j node id:
MATCH (p:Person) where ID(p)=1
OPTIONAL MATCH (p)-[r]-() //drops p relations
DELETE r,p
Если вы ссылаетесь на свой собственный идентификатор 'id' на node:
MATCH (p:Person {id:1})
OPTIONAL MATCH (p)-[r]-() //drops p relations
DELETE r,p
Ответ 2
Самая чистая развертка для node с id "xx" -
MATCH (n), где id (n) = xx DETACH DELETE n
(https://neo4j.com/docs/developer-manual/current/cypher/#delete-delete-all-nodes-and-relationships)
Ответ 3
Когда node является сиротой.
Start n=node(1)
Delete n;
Ответ 4
Следуя ссылке, предоставленной @saad-khan, здесь приведен пример получения идентификаторов узлов и отношений.
В приведенном ниже коде показаны идентификаторы, поэтому вы можете убедиться, что вы удаляете все, что связано с данным идентификатором.
MATCH (node)-[relation:HAS]->(value)
where ID(node)=1234
RETURN ID(instance), ID(value), ID(r)
Ps.: ": HAS" - пример отношения.
Ответ 5
Старый вопрос и ответ, но чтобы удалить узел, когда у него есть отношения, используйте DETACH
MATCH (n) where ID(n)=<your_id>
DETACH DELETE n
или иначе вы получите это:
Neo.ClientError.Schema.ConstraintValidationFailed: Cannot delete node<21>, because it still has relationships. To delete this node, you must first delete its relationships.
Это как SQL CASCADE