最近,我正在研究如何通过属性查找重复节点,并发现以下结果提供了非常有效的解决方案:
由于我使用的是Neo4j v2.2.3社区,所以我使用了以下样式:
match (n:Label) with n.prop as prop, collect(n) as nodelist, count(*) as count where count > 1 return prop, nodelist, count我很难理解这是怎么回事。我在职业生涯中一直使用关系数据库,只是没有分组机制,这显然是因为我有一个节点列表和它们各自的计数。
请有人解释一下这是如何工作的,还是提供一个解释的参考?
发布于 2015-07-25 15:39:30
重要的一点是:
聚合函数接受多个输入值,并从中计算聚合值。示例是计算多个数值的平均值的avg,或在一组值中查找最小数值的min。 聚合可以在所有匹配的子图上完成,也可以通过引入键值来进一步划分。这些是非聚合表达式,用于对聚合函数中的值进行分组。 因此,如果返回语句如下所示: 返回n,计数(*) 我们有两个返回表达式: n和count()。第一个,n,不是聚合函数,因此它将是分组键。后者,count()是一个聚合表达式。因此,根据分组键的不同,匹配的子图将被划分为不同的桶。然后,聚合函数将在这些桶上运行,计算聚合值。 如果要使用聚合对结果集进行排序,则聚合必须包含在要按ORDER的顺序使用的返回中。
您的查询相当简单:
match (n:Label)
with n.prop as prop,
collect(n) as nodelist,
count(*) as count
where count > 1
return prop, nodelist, count您只是在with块中而不是在return块中进行聚合。在本例中,collect()不是聚合函数(我知道,术语似乎有点奇怪),但count(*)是。因此,根据分组键的不同,查询被划分为不同的桶;您的查询在这里有点奇怪,因为prop似乎是您的分组键。不确定是否打算这样做,这取决于查询的语义。
https://stackoverflow.com/questions/31627698
复制相似问题