为什么这个查询返回三行相同的答案?



我不太明白为什么这个查询会返回这个结果。
节点(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.p weight, m.p size, m.p 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 

在您的图中(根据您的控制台),您有来自"A"的三个关系,因此,您的查询将匹配三个路径。

我不太清楚你所说的"外部节点"是什么意思。

查询:

MATCH (n:label)-[r]->(m)
WHERE n.label = 'A'
RETURN n.label, count(r)
对于连接到'A'的三个节点,

将返回一行,第一列为'A',第二列为数字3。如果您希望获得这样的"group by"效果,那么您不能像上面那样在同一个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)

给出了更多的信息。也许这就是你想要的?

您的查询返回n.labeln.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

这是你想要的吗?正如其他人所发布的,不清楚您所说的"外部节点"是什么意思。如果您可以命名或提供"外部节点"的列表,我可以修改我的示例查询以检索您想要的信息。

最新更新