2017-02-10 22 views
2

我执行使用curl下面的代码(一切都在同一行,当我真正运行它。我打破它在这里,使其更易于阅读)。节点创建成功,但关系不是。它不识别节点之间的关系。使用curl发布密码时,为什么不建立关系?

curl --user neo4j:mypassword -i -H accept:application/json -H 
content-type:application/json -XPOST http://localhost:7474/db/data/transaction/commit -d 
'{"statements":[ 
{"statement":"CREATE (keanu:Actor { name : '\''Keanu Reeves'\''}) return id(keanu)"}, 
{"statement":"CREATE (chad:Director { name : '\''Chad Stahelski'\''}) return id(chad)"}, 
{"statement":"CREATE (david:Director { name : '\''David Leitch'\''}) return id(david)"}, 
{"statement":"CREATE (william:Actor { name : '\''William Dafoe'\''}) return id(william)"}, 
{"statement":"CREATE (michael:Actor { name : '\''Michael Nyquist'\''}) return id(michael)"}, 
{"statement":"CREATE (movienew:Movie { title : '\''John Wick'\''}) return id(movienew)"}, 
{"statement":"CREATE (keanu)-[:ACTS_IN ]->(movienew)"}, 
{"statement":"CREATE (chad)-[:Directed_IN ]->(movienew)"}, 
{"statement":"CREATE (david)-[:Directed_IN ]->(movienew)"}, 
{"statement":"CREATE (william)-[:ACTS_IN ]->(movienew)"}, 
{"statement":"CREATE (michael)-[:ACTS_IN ]->(movienew)"} 
]}' 

enter image description here

它不承认的关系之间的哪些节点。

应该如何解决呢?


更新:我现在已经改变了我的代码到这个

curl --user neo4j:mypassword -i -H accept:application/json -H content-type:application/json -XPOST http://localhost:7474/db/data/transaction/commit -d '{"statements":[{"statement":"CREATE (matrix1:Movie { title : '\''The Matrix'\'', year : '\''1999-03-31'\'' }) return id(matrix1)","CREATE (matrix2:Movie { title : '\''The Matrix Reloaded'\'', year : '\''2003-05-07'\'' }) return id(matrix2)","CREATE (matrix3:Movie { title : '\''The Matrix Revolutions'\'', year : '\''2003-10-27'\'' }) return id(matrix3)","CREATE (keanu:Actor { name : '\''Keanu Reeves'\''}) return id(keanu)","CREATE (laurence:Actor { name : '\''Laurence Fishburne'\''})","CREATE (carrieanne:Actor { name : '\''Carrie-Anne Moss'\''})","CREATE (keanu)-[:ACTS_IN { role : '\''Neo'\'' }]->(matrix1)","CREATE (keanu)-[:ACTS_IN { role : '\''Neo'\'' }]->(matrix2)","CREATE (keanu)-[:ACTS_IN { role : '\''Neo'\'' }]->(matrix3)","CREATE (laurence)-[:ACTS_IN { role : '\''Morpheus'\'' }]->(matrix1)","CREATE (laurence)-[:ACTS_IN { role : '\''Morpheus'\'' }]->(matrix2)","CREATE (laurence)-[:ACTS_IN { role : '\''Morpheus'\'' }]->(matrix3)","CREATE (carrieanne)-[:ACTS_IN { role : '\''Trinity'\'' }]->(matrix1)","CREATE (carrieanne)-[:ACTS_IN { role : '\''Trinity'\'' }]->(matrix2)","CREATE (carrieanne)-[:ACTS_IN { role : '\''Trinity'\'' }]->(matrix3)"}]}' 

,但后来我得到错误 '无法反序列化要求:意外的字符(', '(代码44))'


更新:基于公认的答案,我复制的确切格式,并将其应用到另一个程序,但THI时候我接收到下方的错误:

{ “结果”:[], “错误”:[{ “代码”: “Neo.ClientError.Request.InvalidFormat”, “消息”:“无法反序列化请求:意外字符( ''(代码46)):期待双引号在[来源开始字段名\ N:HttpInputOverHTTP @ 442ac29b;线:1,列:3]“}]}

我的代码是:

curl --user neo4j:mypassword -i -H accept:application/json \ 
-H content-type:application/json \ 
-XPOST http://localhost:7474/db/data/transaction/commit \ 
-d @- << EOF 
{ 
    "statements": 
    [ 
     { 
     "statement": 
     "CREATE (matrix1:Movie { title : 'The Matrix', year : '1999-03-31'}) 
     CREATE (matrix2:Movie { title : 'The Matrix Reloaded', year : '2003-05-07'}) 
     CREATE (matrix3:Movie { title : 'The Matrix Revolutions', year : '2003-10-27'}) 
     CREATE (keanu:Actor { name : 'Keanu Reeves'}) 
     CREATE (laurence:Actor { name : 'Laurence Fishburne'}) 
     CREATE (carrieanne:Actor { name : 'Carrie-Anne Moss'}) 
     CREATE (keanu)-[:ACTS_IN { role : 'Neo' }]->(matrix1) 
    CREATE (keanu)-[:ACTS_IN { role : 'Neo' }]->(matrix2) 
    CREATE (keanu)-[:ACTS_IN { role : 'Neo' }]->(matrix3) 
    CREATE (laurence)-[:ACTS_IN { role : 'Morpheus' }]->(matrix1) 
    CREATE (laurence)-[:ACTS_IN { role : 'Morpheus' }]->(matrix2) 
    CREATE (laurence)-[:ACTS_IN { role : 'Morpheus' }]->(matrix3) 
    CREATE (carrieanne)-[:ACTS_IN { role : 'Trinity' }]->(matrix1) 
    CREATE (carrieanne)-[:ACTS_IN { role : 'Trinity' }]->(matrix2) 
    CREATE (carrieanne)-[:ACTS_IN { role : 'Trinity' }]->(matrix3) 
    RETURN *" 
    } 
] 
} 
EOF 

有人能告诉我为什么这是不正确的

回答

3

我认为最好的办法是消除一帮那些无谓的蜱的,所以你可以看到你在做什么好一点。正如@inversefalcon所说,当你执行每条语句时你会失去语境。您希望将它全部保存在一个中,以便在最后创建关系时保留每个CREATE的标识符。

你应该能够剪切和粘贴此块原样。

curl --user neo4j:password -i -H accept:application/json \ 
    -H content-type:application/json \ 
    -XPOST http://localhost:7474/db/data/transaction/commit \ 
    -d @- << END_OF_CYPHER 
{ 
    "statements": 
    [ 
    { 
     "statement": 
     "CREATE (keanu:Actor { name : 'Keanu Reeves'}) 
     CREATE (chad:Director { name : 'Chad Stahelski'}) 
     CREATE (david:Director { name : 'David Leitch'}) 
     CREATE (william:Actor { name : 'William Dafoe'}) 
     CREATE (michael:Actor { name : 'Michael Nyquist'}) 
     CREATE (movienew:Movie { title : 'John Wick'}) 
     CREATE (keanu)-[:ACTS_IN ]->(movienew) 
     CREATE (chad)-[:Directed_IN ]->(movienew) 
     CREATE (david)-[:Directed_IN ]->(movienew) 
     CREATE (william)-[:ACTS_IN ]->(movienew) 
     CREATE (michael)-[:ACTS_IN ]->(movienew) 
     RETURN *" 
    } 
    ] 
} 
END_OF_CYPHER 
+0

非常感谢!这很漂亮。这个EOF代表什么? – vivi11130704

+0

它只是一个标签,以便shell知道它何时读取输入的结尾。 EOF只是传统*文件结尾*。 –

+0

我明白了。我用另一个问题的确切格式,但得到一个错误消息(代码显示在我上面的帖子)。你能告诉我为什么这是不正确的吗? – vivi11130704

2

独立语句具有单独的范围是什么?变数。一旦你在接下来的声明是,以往任何变量都没有。

这就是为什么在每个关系创建语句,您使用的变量是全新的,所以一个新的三重空节点连接到根据给定的关系创建的每个关系创建声明都会创建。

为了避免这种情况,你需要运行的创建查询的所有线路在单个语句(和摆脱那些回报,至少要等到最后一行)。

+0

我更新了我的文章 - 我试了你的建议,但得到了一个错误...请问你能告诉我什么是错的? – vivi11130704

+1

对于单个语句,不要使用逗号分隔单独的字符串。这是一个单一的字符串,没有返回(至少直到最后),并且子句之间没有逗号。 – InverseFalcon

+0

谢谢你们! – vivi11130704

相关问题