在我的Neo4j / SDN4项目中,我有一个复杂的节点权限层次结构,其中包含许多不同类型的链接对象。我正在研究Like / Dislike功能,我系统中的每个节点都可以有define temp-table tt no-undo
field priority as character
.
create tt. tt.priority = "".
create tt. tt.priority = "1".
create tt. tt.priority = "2".
create tt. tt.priority = "3".
create tt. tt.priority = "".
for each tt by ( if tt.priority = "" then "4" else tt.priority ):
display string( rowid( tt ) ) tt.priority.
end.
个对象的关联列表。
现在我正在处理删除查询。问题是,如果我要删除大型层次结构的根节点,我必须找到与此结构中每种类型节点相关联的Like
个节点,并单独删除它们。
所以,我只是想知道在Neo4j / SDN 4中是否有一个选项..类似于RDBMS系统中的级联删除,可以用于此目的以避免巨大的Cypher查询?
答案 0 :(得分: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 :(得分: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