1

使用 Neo4j,我为每个用户实现了一个新闻源。我正在使用具有两种关系“next_activity”/“prev_activity”的双链表。在每个活动节点上,我可以将其他关系设为“LIKE”。当在我的系统中删除用户时,我想删除所有新闻提要。所以我必须迭代每个活动,删除它(以及所有像 LIKE 的关系)并能够使用关系“next_activity”进入下一个活动。

是否可以在一个请求中使用 Cypher(我的意思是使用 *..100 选项)。

谢谢!


我试过(1.8.2版):

    start user=node:id(id="...") match  path=user-[r:NEXT|PREV|LIKES*]->activity
    with relationships(path) as act_r, nodes(path) as act_n
    foreach(r in act_r : delete r)
    with act_n
    foreach(n in act_n : delete n);

但我有“TransactionFailureException”

我将在 1.9.2 RC2 上进行测试

4

1 回答 1

2

我认为这样的事情应该有效:

start user=node... // lookup user in index
match p=user-[:NEXT*]-activity // find all activities nodes in the linked list
with nodes(p) as activities // this also includes the user
foreach activity in activities: 
  match activity-[r?]-() // get all relationships coming off of each activity
  delete activities, r; // delete all for each activity

更新:新想法。我会把另一个想法留给后代。这应该可以工作,因为它应该匹配每条路径直到最后,我们将只使用端点来删除 :LIKE 关系(或任何关系)脱离这些关系。

start user=node... // lookup user in index
match p=user-[:NEXT*]-activity, activity-[r?]-()
delete user, activity, r;

我建立了一个图表并对其进行了测试,所以我认为它应该是一个通用的解决方案。

http://console.neo4j.org/?id=nnj5h8

于 2013-05-21T13:09:48.047 回答