[英]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
有关系,并返回每个洲洲代码及其国家集合。
简单组合MATCH
和MERGE
:
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.