如果您单独执行查询,则查询之间将不会携带变量名称(sally
,john
)。这意味着你的第三个查询被解释不变量sally
和john
势必东西:
CREATE (sally)-[:FRIEND_OF { since: 1357718400 }]->(john)
所以,你会如果你写的实现相同的:
CREATE (node1)-[:FRIEND_OF { since: 1357718400 }]->(node2)
甚至省略所有变量名:
CREATE()-[:FRIEND_OF { since: 1357718400 }]->()
可以解决这个多种方式:
1 .:使用单个查询来确保其行不是单独执行的。
CREATE
(sally:Person { name: 'Sally', age: 32 }),
(john:Person { name: 'John', age: 27 }),
(sally)-[:FRIEND_OF { since: 1357718400 }]->(john)
2 .:使用MATCH
查找先前插入的节点。
CREATE (sally:Person { name: 'Sally', age: 32 })
CREATE (john:Person { name: 'John', age: 27 })
MATCH (sally {name: 'Sally'}), (john {name: 'John'})
CREATE (sally)-[:FRIEND_OF { since: 1357718400 }]->(john)
当然,后一种方法假定名称是唯一的标识符,这通常是不正确的。要解决这个问题,您可以:
回用ID()
功能和使用MATCH (sally), (john) WHERE ID(sally) = ..., ID(john) = ...
或
使用一些其他的标识,从数据库外(社会安全号码等)的节点标识符。