如何将具有相同节点类型的节点从不同的匹配模式组合到单个列或集合中?

时间:2016-08-18 07:23:04

标签: python neo4j

我正在创建一个学习Neo4J的社交网络。我们有用户及其关注者,帖子。我们想要合并两个陈述。

目标:按时间顺序排列您的帖子和您关注的帖子。

  1. 我的帖子
  2. 我的关注用户帖子
  3. 我们尝试 OR RETURN p + l作为帖子 Serverside语言合并(订单问题)

    我如何创建此Cypher声明?

    标签和关系

    • 用户
      • 用户名
      • 文本

    (用户) - [f:关注] - (用户)

    (发布) - [p:POSTED_BY] - (用户)

    修改

    我们也试过这个Cypher

    match (cur_user: User {username: 'ahmetsa'})-[:FOLLOW]->(others: User)<- [:POSTED_BY]-(p: Post) match ( l: Post) - [:POSTED_BY]->(cur_user: User {username: 'ahmetsa'}) return p+l

    但是会出现类型错误

    类型不匹配:预期收集但是节点(第3行,第10列(偏移:177)) “return p + l”

    解决方案

    Match (cur_user: User {username: 'ahmetsa'})-[:FOLLOW]->(others: User)<- [:POSTED_BY]-(p: Post) With cur_user,p Match ( l: Post) - [:POSTED_BY]->(cur_user) Return collect(p) + collect(l) as posts

1 个答案:

答案 0 :(得分:1)

您可以使用WITH合并两个语句:

Match (cur_user: User {username: 'ahmetsa'})-[:FOLLOW]->(others: User)<- [:POSTED_BY]-(p: Post) With cur_user, p
Match ( l: Post) - [:POSTED_BY]->(cur_user)
Return collect(p) + collect(l) as posts

WITH允许您将变量传递给下一个查询部分,以便您可以使用它而无需再次匹配。