这是非常基本的,但我不确定为什么会发生这种情况:
创建(肯尼迪机场:机场) 创建(MIA:机场)
CREATE(JFK) - [:ROUTE] - >(MIA)
它不是在JFK和MIA之间创建关系,而是实际创建了两个节点。我以为它会使用节点的标识符(JFK)并使用该实例。
答案 0 :(得分:0)
这很有趣。如果您执行以下操作(将变量更改为小写,这是最常见的做法),该怎么办?
CREATE (jfk:Airport), (mia:Airport), (jfk)-[:ROUTE]->(mia)
答案 1 :(得分:0)
JFK
或MIA
的相关内容。
详细说明:
CREATE (JFK:Airport)
这将创建一个标签为Airport
且没有属性的节点。 JFK
是仅在此执行上下文中使用的标识符。
CREATE (MIA:Airport)
这会创建另一个标签为Airport
但没有属性的节点。 MIA
是仅在此执行上下文中使用的标识符。
CREATE (JFK)-[:ROUTE]->(MIA)
这会创建两个带有 no 标签的附加节点,并在它们之间创建关系。
如果你一起执行它们,Neo4j将使用JFK
和MIA
标识符,只创建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);