2017-03-17 119 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