Neo4j 密码 - 计算根节点的直接子节点
Neo4j cypher - Counting immediate children of root nodes
尽管阅读了大量文档,但我仍在为一个问题而苦苦挣扎...我试图找到我的图根节点(或多个节点,它们可能是几个顶级节点)并计算它们的直接子节点(所有关系类型为:BELONGS_TO)
我的图表看起来像这样(参见附加的屏幕截图)。我一直在尝试以下查询,只要根节点只有一个输入关系,它就可以工作,而当它有多个输入关系时,它就不会工作。 (我还不太熟悉cyhper语言)。
MATCH (n:Somelabel) WHERE NOT (()-[:BELONGS_TO]->(n:Somelabel)) RETURN n
任何帮助将不胜感激! (我什至还没有尝试计算根节点的直接子节点......根据我的图表,这将是“2”)
cybersam 给出了正确的查询
MATCH (n:Somelabel) WHERE NOT (n)-[:BELONGS_TO]->() RETURN n;
MATCH (n:Somelabel)<-[:BELONGS_TO]-(c:Somelabel)
WHERE NOT (n)-[:BELONGS_TO]->() RETURN n, count(c);
根据您的图表,看起来您实际上是在寻找 "leaf" 个节点。此查询将搜索所有 Somelabel
没有传出关系的节点,并且 return 每个这样的节点以及具有指向该节点的关系的不同节点的数量计数。
MATCH (n:Somelabel)
WHERE NOT (n)-[:BELONGS_TO]->()
OPTIONAL MATCH (m)-[:BELONGS_TO]->(n)
RETURN n, COUNT(DISTINCT m);
如果您实际上是在寻找所有 "root" 个节点,那么您的原始查询会起作用。
作为完整性检查,如果您有一个您认为是 "leaf" 节点的特定节点(假设它的 id
值为 123),则此查询应该 return r
和 m
的 null
值的单行。如果你得到非空结果,那么你实际上有外向关系。
MATCH (n {id:123})
OPTIONAL MATCH (n)-[r]->(m)
RETURN r, m
尽管阅读了大量文档,但我仍在为一个问题而苦苦挣扎...我试图找到我的图根节点(或多个节点,它们可能是几个顶级节点)并计算它们的直接子节点(所有关系类型为:BELONGS_TO)
我的图表看起来像这样(参见附加的屏幕截图)。我一直在尝试以下查询,只要根节点只有一个输入关系,它就可以工作,而当它有多个输入关系时,它就不会工作。 (我还不太熟悉cyhper语言)。
MATCH (n:Somelabel) WHERE NOT (()-[:BELONGS_TO]->(n:Somelabel)) RETURN n
任何帮助将不胜感激! (我什至还没有尝试计算根节点的直接子节点......根据我的图表,这将是“2”)
cybersam 给出了正确的查询
MATCH (n:Somelabel) WHERE NOT (n)-[:BELONGS_TO]->() RETURN n;
MATCH (n:Somelabel)<-[:BELONGS_TO]-(c:Somelabel)
WHERE NOT (n)-[:BELONGS_TO]->() RETURN n, count(c);
根据您的图表,看起来您实际上是在寻找 "leaf" 个节点。此查询将搜索所有 Somelabel
没有传出关系的节点,并且 return 每个这样的节点以及具有指向该节点的关系的不同节点的数量计数。
MATCH (n:Somelabel)
WHERE NOT (n)-[:BELONGS_TO]->()
OPTIONAL MATCH (m)-[:BELONGS_TO]->(n)
RETURN n, COUNT(DISTINCT m);
如果您实际上是在寻找所有 "root" 个节点,那么您的原始查询会起作用。
作为完整性检查,如果您有一个您认为是 "leaf" 节点的特定节点(假设它的 id
值为 123),则此查询应该 return r
和 m
的 null
值的单行。如果你得到非空结果,那么你实际上有外向关系。
MATCH (n {id:123})
OPTIONAL MATCH (n)-[r]->(m)
RETURN r, m