无法理解为什么此查询会返回此结果 节点(A)仅在我的图表中存在一次,但在结果中显示三次 我想要的是每个外部节点+(A)节点的总数 - 在这种情况下,该值应为4.
以下是控制台图表的链接:http://console.neo4j.org/r/btmdfi
MATCH (n)-[r]-(m)
WHERE n.label = 'A'
WITH n, m, collect (Distinct m.size) as sizes, collect (Distinct m.weight) as weights, collect (Distinct m.color) as colors
WITH n, sizes, weights, colors, count ( m.size) as size_ct, count ( m.weight) as weight_ct, count ( m.color) as color_ct
WITH n, sizes, weights, colors, sum( size_ct + weight_ct + color_ct) as count_n
RETURN n.label
我想在查询中添加第二部分来搜索也有标签的其他节点,然后比较节点类型(m.weight,m.size,m.color)和这些类型的数量到(A)节点的值。
所以输出看起来像:
n.label count_match(r) m.weight m.size m.color
A 4 heavy small red
B 2/4 light large red
C 3/4 light small red
答案 0 :(得分:1)
在您的图表中(根据您的控制台),您有三个来自“A”的关系,因此,您的查询将匹配三个路径。
我不确定“外部节点”是什么意思。
答案 1 :(得分:1)
查询:
MATCH (n:label)-[r]->(m)
WHERE n.label = 'A'
RETURN n.label, count(r)
将返回一行,其中包含' A'在第一列和第二列中的数字3中,对于连接到' A'的三个节点。如果您希望通过'像这样的效果,那么你不能像上面那样在同一个WITH语句中返回n和m。
看到链接的WITH语句,它们之间没有任何内容也有点不寻常。不知道你在那里计划什么。或许对你想要完整查询(包括所有的collect()和WITH)的更多解释是打算做的吗?
如下的查询:
MATCH (n:label)-[r]->(m)
WHERE n.label = 'A'
RETURN n.label, count(r),
collect(m.weight), collect(m.size), collect(m.color)
提供更多信息。也许这正朝着你追求的目标前进?
答案 2 :(得分:0)
您的查询返回n.label
。 n.label
在查询的早期定义为“A”。这应该很明显为什么它会三次返回'A'。
让我们分解一个只返回4的简单查询:
MATCH (n)-[r]-(m)
WHERE n.label = 'A'
RETURN count(m) + 1
这里我们要求Neo4j返回连接到A(n)的所有节点(m)。然后,我们计算它们并添加1以包含A节点。此查询返回节点:size 4
,:color red
和:weight 4
。
这就是你想要的吗?正如其他人发布的那样,目前尚不清楚“外部节点”是什么意思。如果您可以命名或提供“外部节点”列表,我可以修改我的示例查询以检索您想要的信息。