Neo4j 嵌套关系的密码查询(类映射查询)
我试图找出是否有一个密码查询来执行类似于map的查询函数。给出了示例数据Neo4j 嵌套关系的密码查询(类映射查询),neo4j,cypher,Neo4j,Cypher,我试图找出是否有一个密码查询来执行类似于map的查询函数。给出了示例数据 (stack) / | \ / | \ (item) (item) (item) / \ | / \ / \ | /
(stack)
/ | \
/ | \
(item) (item) (item)
/ \ | / \
/ \ | / \
(node) (node) (node) (node)(node)
到目前为止,我对匹配节点
s的查询是
START stack=node({stack})
MATCH (stack)-[:Item]-(item)-[:Representation]-(representation)
RETURN representation
(representation
在这个查询中相当于node
我只是在上面的图中没有足够的空间来继续写表示)
现在,正如预期的那样,此查询只返回与所有项
节点相关的表示的平面列表。e、 g
[ representation, representation, representation.... ]
我真正想要的是一个查询,返回项的嵌套结构及其相关的表示,例如
[
[ item, representations ],
[ item, representations ],
[ item, representations ]
]
返回的确切结构并不重要。这样我就可以轻松地将项
映射到它的表示
,而无需为每个项
s表示发送查询
这似乎是一个微不足道的问题,但在浏览了Cypher备忘单、观看视频和谷歌搜索Cypher教程之后。我还没有找到一套关于如何使用Cypher执行此类查询(或者实际上是大多数查询)的简单解释
(顺便说一句,如果有人也知道“傻瓜密码”教程,我将不胜感激。)诀窍在于使用
聚合在不使用groupby
的情况下工作,如下所示
如果在return
子句中至少使用一个聚合函数(count
,collect
,avg
,min
,max
等),则所有未聚合的列都被视为分组键
在SQL中,您可以编写如下内容:
SELECT item, collect(representation) as representations
FROM ...
GROUP BY item
这只是一个重复的声明。诀窍在于使用
聚合在不使用groupby
的情况下工作,如下所示
如果在return
子句中至少使用一个聚合函数(count
,collect
,avg
,min
,max
等),则所有未聚合的列都被视为分组键
在SQL中,您可以编写如下内容:
SELECT item, collect(representation) as representations
FROM ...
GROUP BY item
这只是一个重复的声明。返回项目,表示
,否?@JamesR我不知道,我从来都不理解的目的,
我想这意味着返回一个简单的项目列表和一个简单的表示
。我会试试看:)@JamesR刚刚试过,它确实返回了一个简单的项目列表
和表示
返回项目,表示
,没有?@JamesR我不知道,我从来都不明白的目的,
我认为这意味着返回一个简单的项目列表和一个简单的表示列表。我将尝试:)@JamesR刚刚尝试过,它确实返回了一个简单的项目列表
和表示
。这似乎已经成功了,谢谢。您是否可以描述一下当返回项时,表示法返回一个平面列表时,为什么会出现这种情况?理解collect()
是如何工作的似乎有点违反直觉。不要不欣赏你的答案,因为它显然有效。然而,我认为这对社区是有益的,如果你能在你的回答中提供更多的解释,说明发生了什么以及为什么这会起作用。这似乎已经成功了,谢谢。您是否可以描述一下当返回项时,表示法返回一个平面列表时,为什么会出现这种情况?理解collect()
是如何工作的似乎有点违反直觉。不要不欣赏你的答案,因为它显然有效。然而,我认为如果你能在你的答案中提供更多的解释,说明发生了什么以及为什么会这样,这对社区是有益的。