Cypher查询嵌套关系(像查询一样)

时间:2013-12-11 20:04:50

标签: neo4j cypher

我试图找出是否有Cypher查询来执行地图查询功能。给出示例数据。

                        (stack)
                      /    |   \
                     /     |    \
                (item)  (item)  (item)
                 /  \      |       / \
                /    \     |      /   \
           (node) (node) (node) (node)(node)

到目前为止,我用于匹配node的查询是。

START stack=node({stack}) 
MATCH (stack)-[:Item]-(item)-[:Representation]-(representation)
RETURN representation

(此representation中的node相当于item我在上图中没有足够的空间来保持书写表示。

现在正如预期的那样,此查询仅返回与所有[ representation, representation, representation.... ] 个节点相关的表示的平面列表。 e.g。

items

我真正想要的是一个查询,以返回representation的嵌套结构及其相关的[ [ item, representations ], [ item, representations ], [ item, representations ] ] ,例如。

return

item的确切结构并不重要。这样我就可以轻松地将representations映射到item,而无需为每个representations {{1}}发送查询。

这可能看起来像一个微不足道的问题,但在查看Cypher备忘单并观看视频和谷歌搜索Cypher教程之后。我还没有找到关于如何使用Cypher执行此类查询(或实际上大多数查询)的简单解释。

(旁注如果有人也知道" Cypher傻瓜"教程我会非常感激。)

1 个答案:

答案 0 :(得分:6)

诀窍是使用aggregation

RETURN item, collect(representation) as representations

聚合在没有group by的情况下工作。

如果您在{{1}中使用至少一个聚合函数(countcollectavgminmax等) }子句,然后将所有非聚合列视为分组键。

在SQL中你会写一些类似的东西:

return

这只是一个重复的声明。