首页 文章

在Neo4j节点之间创建关系

提问于
浏览
1

我有两个标签的节点:国家和大陆 .

每个国家都有一个名为continent_code的 property ,我希望在所有国家及其相应的大陆之间 Build 关系 .

我能做到的只是为这样的大陆创建关系:

MATCH (u:Country {continent_code:"NORAM"}), (a:Continent {code:"NORAM"})
MERGE (u)-[r:IS_COUNTRY_OF]->(a)
RETURN u, a, r

现在我想做的是更像这样的事情:

MATCH (u:Country {continent_code: a:Continent.code})
MERGE (u)-[r:IS_COUNTRY_OF]->(a)
RETURN u, a, r

显然这不起作用,但我不知道如何修复它,我甚至不确定它是否可能在Neo4j / cypher中 .

谢谢你的帮助!

3 回答

  • 1

    简单组合 MATCHMERGE

    MATCH (u:Country) WHERE LENGTH(u.continent_code)>0
    MERGE (a:Continent {code: u.continent_code})
    MERGE (u)-[r:IS_COUNTRY_OF]->(a)
    RETURN u,r,a
    
  • 0

    这可能是你想要的:

    MATCH (u:Country)
    WITH u.continent_code AS cc, COLLECT(u) AS countries
    MERGE (a:Continent { code: cc })
    FOREACH (c IN countries | MERGE (c)-[r:IS_COUNTRY_OF]->(a))
    RETURN cc, countries;
    

    它聚合了具有相同大陆代码的所有国家/地区,使用 MERGE 确保所需的 Continent 节点存在,每个 Country 上确实 MERGE 以确保它与 Continent 有关系,并返回每个大陆代码及其国家/地区的集合 .

  • 2

    我认为,如果我正确理解你的问题,那么对国家和大陆的简单搜索和关系的创造就会奏效 . 在Country和Continent节点之间创建的关系(IS_COUNTRY_OF)实际上不需要Country节点上的属性(continent_code) .

    MATCH (ctry:Country),(cont:Continent)
    WHERE ctry.name = 'Some Country Name' AND cont.name = 'Some Cont Name'
    CREATE (ctry)-[r:IS_COUNTRY_OF]->(cont)
    RETURN ctry, r, cont
    

相关问题