删除 NEO4j 中的最小计数数据



我想在对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节点(如FrequenciesCaseId(获得的值的变量在删除节点后仍然有效。

关于您的特定示例,需要注意的一件棘手的事情是,您的最后一个WITH子句使用聚合,Trace_Type作为分组键。为了使我的答案避免更改分组键(从而可能更改返回的结果(,我只是在WITH子句中添加了COLLECT(DISTINCT b) AS bs。然后,由于每个bs都是b节点的列表(对于Trace_Type(,我使用FOREACH删除每个列表中的节点。

最新更新