代码之家  ›  专栏  ›  技术社区  ›  user732456

neo4j 2个集合之间的所有关系到一定深度

  •  1
  • user732456  · 技术社区  · 8 年前

    MATCH (:Movie { id: '10' })-[*0..3]-(p:Producer)
    RETURN p.id
    

    这会得到一些结果,所以很明显,电影-10和任何制片人之间都有一些关系。结果集的一部分是:

    'producer_12'
    'producer_18'
    'producer_36'
    .........
    

    现在我想返回movie-10和producer_12或producer_18之间最多3跳的所有关系。我修改了我的匹配。

    MATCH (:Movie { id: '10' })-[*0..3]-(p:Producer)
    WHERE p.id IN ['producer_12', 'producer_18']
    RETURN p.id
    

    这已经没有返回任何值,而我预计制片人12和18会在答案中。此外,我找不到标记关系的方法。这是不可接受的。[r:*0.3]。

    我的最后一个查询必须是获得两个集(电影10、12或15)和(制片人12或18)之间的所有关系。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Bruno Peres    8 年前

    CREATE (movie:Movie {id : '10'})
    CREATE (producer12:Producer {id:'producer_12'})
    CREATE (producer18:Producer {id:'producer_18'})
    CREATE (producer36:Producer {id:'producer_36'})
    CREATE (movie)-[:PRODUCTED_BY]->(producer12)
    CREATE (movie)-[:PRODUCTED_BY]->(producer18)
    CREATE (movie)-[:PRODUCTED_BY]->(producer36)
    

    查询:

    MATCH (:Movie { id: '10' })-[*0..3]-(p:Producer)
    WHERE p.id IN ['producer_12', 'producer_18']
    RETURN p.id
    

    结果:

    ╒═════════════╕
    │"p.id"       │
    ╞═════════════╡
    │"producer_12"│
    ├─────────────┤
    │"producer_18"│
    └─────────────┘
    

    可能是你的 id 的属性 :Movie string 但是一个 integer 。请尝试将查询更改为:

    MATCH (:Movie { id: 10 })-[*0..3]-(p:Producer)
    WHERE p.id IN ['producer_12', 'producer_18']
    RETURN p.id
    

    '10' 10 .

    认可的。[r:*0.3]。

    : 仅与类型(例如, [r:SOME_TYPE*0..3] ). 因此,请删除 ,这样: [r *0..3] .

    编辑:

    来自评论:

    该功能已弃用,将在未来版本中删除。结合 用户732456 3小时前

    3.2.0-rc1 .

    pull request

    MATCH (n)-[rs*]-() RETURN rs
    

    将生成警告,写入同一查询的规范方式为:

    MATCH p=(n)-[*]-() RETURN relationships(p) AS rs