Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j Cypher查询以统计每个节点具有的特定类型的关系数,包括其子节点中的相同类型关系_Neo4j_Count_Cypher_Match_Neo4j Apoc - Fatal编程技术网

Neo4j Cypher查询以统计每个节点具有的特定类型的关系数,包括其子节点中的相同类型关系

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

我有如下节点层次结构,其中节点c1..c6的类型为:Category,其子节点i1..i7的类型为:Item

我需要获得的是每个类别中的项目数量,包括它们的子类别。输出应如下所示:

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)
可选匹配(类别)