我想在对neo4j进行一些计数后删除一些数据。此方法可以手动完成(计算数据然后删除数据(,但我需要有人指出是否可以自动执行此操作(在同一查询中计算数据并删除数据(。在 neo4j 中使用 min(( 函数进行一些计数后,我找不到返回最少/最小数据的方法。我可能可以使用排序方式并限制数据来执行解决方法,但是如果我想执行此方法,我需要确保除了此之外没有其他选择。
这是数据的链接。数据是仅包含case_id和活动名称的自定义事件日志。
所以这是我已经尝试过的:
//LOAD DATA
LOAD CSV with headers FROM "file:///*.csv"
AS line
Create (:Activity {CaseId:line.Case_ID,
Name:line.Activity })
LOAD CSV with headers FROM "file:///*.csv"
AS line
Create (:CaseActivity {CaseId:line.Case_ID,
Name:line.Activity })
//SEQUENCE DISCOVERY
match (c:Activity)
with collect(c) AS Caselist
unwind range(0,Size(Caselist) - 2) as idx
with Caselist[idx] AS s1, Caselist[idx+1] AS s2
match (b:CaseActivity),(a:CaseActivity)
where s1.CaseId = s2.CaseId AND
s1.Name = a.Name AND
s2.Name = b.Name AND
s1.CaseId = a.CaseId AND
s2.CaseId = b.CaseId
merge (a)-[:NEXT {relation:"NEXT"}]->(b)
match(a:Activity)
with a.CaseId as id,
collect (a.Name) as Trace_Type
match(b:CaseActivity)
where id = b.CaseId
return count (distinct b.CaseId) as Frequencies, Trace_Type, Collect(distinct b.CaseId) as CaseId
order by Frequencies desc
您的问题没有指定要删除的内容。此查询假定您希望最后一个查询删除b
节点(并返回有关已删除b
节点的一些数据(:
MATCH (a:Activity)
WITH a.CaseId as id, COLLECT(a.Name) AS Trace_Type
MATCH (b:CaseActivity)
WHERE id = b.CaseId
WITH
COUNT(distinct b.CaseId) AS Frequencies,
Trace_Type,
COLLECT(distinct b.CaseId) AS CaseId,
COLLECT(DISTINCT b) AS bs
FOREACH(x IN bs | DELETE x)
RETURN Frequencies, Trace_Type, CaseId
ORDER BY Frequencies DESC;
包含从已删除的b
节点(如Frequencies
和CaseId
(获得的值的变量在删除节点后仍然有效。
关于您的特定示例,需要注意的一件棘手的事情是,您的最后一个WITH
子句使用聚合,Trace_Type
作为分组键。为了使我的答案避免更改分组键(从而可能更改返回的结果(,我只是在WITH
子句中添加了COLLECT(DISTINCT b) AS bs
。然后,由于每个bs
都是b
节点的列表(对于Trace_Type
(,我使用FOREACH
删除每个列表中的节点。