【问题标题】:How to concenate multiple lists in neo4j如何在neo4j中连接多个列表
【发布时间】:2018-09-12 10:17:00
【问题描述】:

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

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

MATCH (event:Event) RETURN event.tags

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

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      地图投影可以满足您的大部分要求。

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

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

      这将为您提供一个事件数组,其中添加了 user_id 参数。

      【讨论】:

      • 你好@Eric。这不是问题要问的,它专门关于减少列表。不过,我已经进一步阅读了地图投影,发现它对其他用例非常有用,感谢您提供链接!
      猜你喜欢
      • 2014-08-22
      • 1970-01-01
      • 2021-12-16
      • 2015-01-11
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多