Neo4j Cypher查询以统计每个节点具有的特定类型的关系数,包括其子节点中的相同类型关系
我有如下节点层次结构,其中节点c1..c6的类型为:Category,其子节点i1..i7的类型为:Item 我需要获得的是每个类别中的项目数量,包括它们的子类别。输出应如下所示:Neo4j Cypher查询以统计每个节点具有的特定类型的关系数,包括其子节点中的相同类型关系,neo4j,count,cypher,match,neo4j-apoc,Neo4j,Count,Cypher,Match,Neo4j Apoc,我有如下节点层次结构,其中节点c1..c6的类型为:Category,其子节点i1..i7的类型为:Item 我需要获得的是每个类别中的项目数量,包括它们的子类别。输出应如下所示: category childCount itemCount c1 5 7 c2 2 4 c3 1 3 c4 0 2 c
category childCount itemCount
c1 5 7
c2 2 4
c3 1 3
c4 0 2
c5 0 1
c6 0 2
目前,我有一个查询,返回正确数量的子节点,但只显示每个节点的项数,而不是总计。不确定我是否遗漏了什么,或者这不是正确的方法
需要注意的是,我不能依赖于自己指定起始节点,因为它可以在数据库中随时间变化,因此查询应该从没有父节点的类别节点开始
MATCH p = (c:Category)-[:IS_PARENT_OF *0..]->(c)
WITH c, apoc.text.join("1" + [rel in relationships(p) | rel.index], '.') as path, size((:Category)<-[:IS_PARENT_OF*]-(c)) as childCount, size((:Item)-[:IS_CATEGORIZED_AS]->(c)) as itemCount, c.name AS name
ORDER BY path
RETURN name, childCount, itemCount
对于未来的访问者,这是我从neo4j在线社区得到的答案:
MATCH (category:Category)
OPTIONAL MATCH (category)-[:IS_PARENT_OF*..10]->(c)
OPTIONAL MATCH (category)<-[:IS_CATEGORIZED_AS]-(item1:Item)
OPTIONAL MATCH (c)<-[:IS_CATEGORIZED_AS]-(item2:Item)
RETURN category.name AS category,
count(DISTINCT(c)) AS childCount,
count(DISTINCT(item1)) + count(DISTINCT(item2)) AS itemCount
匹配(类别:类别)
可选匹配(类别)-[:是*.10的父项]->(c)
可选匹配(类别)对于未来的访问者,这是我从neo4j在线社区得到的答案:
MATCH (category:Category)
OPTIONAL MATCH (category)-[:IS_PARENT_OF*..10]->(c)
OPTIONAL MATCH (category)<-[:IS_CATEGORIZED_AS]-(item1:Item)
OPTIONAL MATCH (c)<-[:IS_CATEGORIZED_AS]-(item2:Item)
RETURN category.name AS category,
count(DISTINCT(c)) AS childCount,
count(DISTINCT(item1)) + count(DISTINCT(item2)) AS itemCount
匹配(类别:类别)
可选匹配(类别)-[:是*.10的父项]->(c)
可选匹配(类别)