我想知道Neo4j是否可以实现以下功能。
假设我有一类节点,比如说(event:Event),而每个Event都有一个tags属性([String])。现在我可以返回所有这些数组,就像:
MATCH (event:Event) RETURN event.tags
但是,我还不明白如何将不同节点结果的输出组合在一个列表中。 Cypher有可能做到这一点吗?当然,总是可以以编程方式解决这个问题,但据我所知,Cypher提供了减少以及原生列表添加。
如果你可以使用APOC library使用flatten
函数收集:
MATCH (event:Event)
RETURN apoc.coll.flatten(COLLECT(event.tags))
COLLECT(event.tags)
将所有结果合并到单个列表中(标签列表列表)
apoc.coll.flatten(..)
将列表列表变为单个列表
如果由于某种原因你不能使用APOC,请使用reduce
:
MATCH (event:Event)
RETURN REDUCE(s = [], tags IN COLLECT(event.tags) | s + tags)
地图投影可以完成您所要求的大部分内容。
map projection documentation您可以从一个节点开始并添加它。
MATCH (user:User)-[:TRIGGERED]->(event:Event) WITH event {.*, user_id:user.user_id} as user_event
这将为您提供添加了user_id参数的事件数组。