繁体   English   中英

在Neo4j节点之间创建关系

[英]Creating relationships between Neo4j nodes

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

每个国家都有一个名为continent_code的财产,我希望在所有国家及其相应的大陆之间建立关系。

我能做到的只是为这样一个特定的大陆建立关系:

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中。

谢谢你的帮助!

这可能是你想要的:

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有关系,并返回每个洲洲代码及其国家集合。

简单组合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

我认为,如果我正确理解你的问题,那么对国家和大陆的简单搜索和关系的创造就会奏效。 在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM