有没有办法可以使用cypher派生特定节点类型的最常见(和第二常见)属性值?
目前我正在确定该属性的不同值:
MATCH(a:Label1)-[r:REL]->(b:Label2) RETURN DISTINCT b.prop;
然后单独计算它们:
MATCH(a:Label1)-[r:REL]->(b:Label2) WHERE b.prop = "x" RETURN COUNT(x);
任何帮助将不胜感激,我使用的是Neo4j 3.0.0。
我不确定如何组合这些查询。
答案 0 :(得分:6)
这很简单:
MATCH (a:Label1)-[r:REL]->(b:Label2)
RETURN b.prop, count(*) as occurences
ORDER BY occurences DESC
LIMIT 2
您可以在此处阅读有关自动汇总的信息:http://neo4j.com/docs/stable/query-aggregation.html
答案 1 :(得分:3)
您可以使用keys()
函数从每个匹配节点获取属性。这将返回该节点的键集合。展开集合并聚合所有匹配节点中每个属性的计数。
MATCH (a:Label1)-[r:REL]->(b:Label2)
UNWIND keys(b) as prop
RETURN prop, count(*) as num_props
ORDER BY num_props desc
答案 2 :(得分:1)
//
// Get patterns
MATCH (a:Label1)-[r:REL]->(b:Label2)
//
// Pass through all keys
UNWIND KEYS(b) as key
//
// Get patterns again
MATCH (a:Label1)-[r:REL]->(b:Label2)
//
// Aggregating by title of the properties and its content
RETURN key as propName, b[key] as propValue, count(b[key]) as propRank
//
// Sort the largest property-value pairs first
ORDER BY propRank DESC