2017-03-17 94 views
1

在我的Neo4j/SDN4项目中,我有一个复杂的节点权限层次结构,其中包含许多不同类型的链接对象。我正在研究喜欢/不喜欢功能,我的系统中的每个节点都可以有关联的Like对象列表。Neo4j Spring Data Neo4j 4级联删除

现在我正在处理删除查询。问题是,如果我要删除大层次结构的根节点,我必须找到与此结构中每种类型节点关联的Like节点,并分别删除它们。

所以,我只是想知道在Neo4j/SDN 4中有一个选项..类似RDBMS系统中的级联删除,可用于此目的以避免庞大的Cypher查询?

回答

2

neoj4-ogm/SDN(2017年3月)目前不提供级联删除。

见GitHub的功能要求https://github.com/neo4j/neo4j-ogm/issues/273

与SDN你最好的选择是创建一个自定义库查询,将同时删除Like节点和根节点:

@Query("MATCH (e:Entity)-[r]-(like) " + 
     "WHERE e.prop = {prop} " + 
     "DELETE e,r,like" 
void deleteEntity(@Param("prop") String prop); 
1

在类似的情况下,我们使用apoc-triggers。例如:

添加触发器

CALL apoc.trigger.add('removeHierarchy',' 
    UNWIND {deletedRelationships} AS rs WITH rs WHERE type(rs) = "LIKE" 
    MATCH (C:Node) WHERE C = endNode(rs) 
    DETACH DELETE C 
', {phase:'before'}); 

初始树

UNWIND RANGE(1,100) as cid 
WITH cid, 
    toInteger(rand()*cid) as pid 
MERGE (P:Node {id: pid}) 
MERGE (C:Node {id: cid}) 
MERGE (P)-[:LIKE]->(C) 

删除根

MATCH (N:Node {id: 0}) DETACH DELETE N