如何在neo4j中连接多个列表

问题描述 投票:0回答:2

我想知道Neo4j是否可以实现以下功能。

假设我有一类节点,比如说(event:Event),而每个Event都有一个tags属性([String])。现在我可以返回所有这些数组,就像:

MATCH (event:Event) RETURN event.tags

但是,我还不明白如何将不同节点结果的输出组合在一个列表中。 Cypher有可能做到这一点吗?当然,总是可以以编程方式解决这个问题,但据我所知,Cypher提供了减少以及原生列表添加。

neo4j cypher
2个回答
3
投票

如果你可以使用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)

0
投票

地图投影可以完成您所要求的大部分内容。

map projection documentation您可以从一个节点开始并添加它。

MATCH (user:User)-[:TRIGGERED]->(event:Event) WITH event {.*, user_id:user.user_id} as user_event

这将为您提供添加了user_id参数的事件数组。

© www.soinside.com 2019 - 2024. All rights reserved.