2016-12-26 59 views
0

我刚开始使用neo4j,我正在关注this教程。我试图执行下面的查询,但是当单独运行每条线和将3条线一起运行时,我会得到不同的结果。在逐行执行查询时获得不同的结果nel4j

CREATE (sally:Person { name: 'Sally', age: 32 }) 

CREATE (john:Person { name: 'John', age: 27 }) 

CREATE (sally)-[:FRIEND_OF { since: 1357718400 }]->(john) 

enter image description here

可能有人给我什么可能会导致此问题,请指示?

回答

2

如果您单独执行查询,则查询之间将不会携带变量名称(sally,john)。这意味着你的第三个查询被解释不变量sallyjohn势必东西:

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) = ...

  • 使用一些其他的标识,从数据库外(社会安全号码等)的节点标识符。

相关问题