建立额外节点的关系

时间:2015-08-13 14:19:53

标签: neo4j cypher

这是非常基本的,但我不确定为什么会发生这种情况:

创建(肯尼迪机场:机场) 创建(MIA:机场)

CREATE(JFK) - [:ROUTE] - >(MIA)

它不是在JFK和MIA之间创建关系,而是实际创建了两个节点。我以为它会使用节点的标识符(JFK)并使用该实例。

3 个答案:

答案 0 :(得分:0)

这很有趣。如果您执行以下操作(将变量更改为小写,这是最常见的做法),该怎么办?

CREATE (jfk:Airport), (mia:Airport), (jfk)-[:ROUTE]->(mia)

答案 1 :(得分:0)

布莱恩·安德伍德(Brian Underwood)提出的问题激发了我的答案。您正在逐行执行语句。这将创建4个节点,2个标签和1个关系。 Neo4j不知道最终创建语句中JFKMIA的相关内容。

详细说明:

CREATE (JFK:Airport)

这将创建一个标签为Airport且没有属性的节点。 JFK是仅在此执行上下文中使用的标识符。

CREATE (MIA:Airport)

这会创建另一个标签为Airport但没有属性的节点。 MIA是仅在此执行上下文中使用的标识符。

CREATE (JFK)-[:ROUTE]->(MIA)

这会创建两个带有 no 标签的附加节点,并在它们之间创建关系。

如果你一起执行它们,Neo4j将使用JFKMIA标识符,只创建2个节点和1个关系。

CREATE (JFK:Airport) 
CREATE (MIA:Airport)
CREATE (JFK)-[:ROUTE]->(MIA)

这就是我认为你所期待的。

答案 2 :(得分:0)

由于您使用了两个单独的查询,因此第一个查询中使用的标识符在第二个查询中完全未知。

标识符(用于节点和关系)是临时的,并且只在单个Cypher查询中有意义 - 它们永远不会存储在数据库中。

实际上,为了完整性,您应该知道,如果该查询包含WITH statements,则标识符在整个单个查询中可能甚至没有意义。例如,在以下查询中,最终将有3个节点(2个Airport节点和1个没有标签的额外节点),因为WITH语句未通过b标识符转发:

CREATE (a:Airport {code:"JFK"}), (b:Airport {code:"MIA"})
WITH a
CREATE (a)-[:ROUTE]->(b);