我有一个复杂的请求,在Neo4j浏览器中完全有效,我想通过API Rest使用,但有子句我无法应对。
语法如下:
MATCH p =() - [*] - >(node1)
在哪里......
WITH ...
...
FOREACH ... SET ...
我使用Transactional Cyper构建了查询,因为我已经被@cybersam建议了,但我无论如何都无法使用多个子句。
要给出一个例子,如果我在一行中写下这句话:
:POST /db/data/transaction/commit {
"statements": [
{
"statement": "MATCH p = (m)-[*]->(n:SOL {PRB : {PRB1}}) WHERE nodes (p)
MATCH q= (o:SOL {PRB : {PRB2}} RETURN n, p, o, q;",
"parameters": {"PRB1": "Title of problem1", "PRB2": "Title of problem2"}
} ],
"resultDataContents": ["graph"] }
我将获得:
{“results”:[],“errors”:[{“code”:“Neo.ClientError.Statement.SyntaxError”,“message”:“输入'R'无效:预期的空格,评论,')'或关系模式(第1行,第90列(偏移:89))\ r \ n \“MATCH p =(m) - [*] - >(n:SOL {PRB:{PRB1}})WHERE节点( p)MATCH q =(o:SOL {PRB:{PRB2}} RETURN n,p,o,q; \“\ r \ n ^”}}}}
但如果我把它分成几行,那么:
:POST /db/data/transaction/commit {
"statements": [
{
"statement": "MATCH p = (m)-[*]->(n:SOL {PRB : {PRB1}})
WHERE nodes (p)
MATCH q= (o:SOL {PRB : {PRB2}}
RETURN n, p, o, q;",
"parameters": {"PRB1": "Title of problem1", "PRB2": "Title of problem2"}
}
],
"resultDataContents": ["graph"]
}
据说:
{ “结果”:[], “错误”:[{ “代码”: “Neo.ClientError.Request.InvalidFormat”, “消息”:“无法 反序列化请求:非法引用的字符((CTRL-CHAR,代码 10)):必须使用反斜杠进行转义才能包含在字符串中 值\ n在[来源:HttpInputOverHTTP @ 41fa906c; line:4,专栏: 79]“}]}
拜托,我需要你的帮助!
亚历
答案 0 :(得分:1)
使用Transaction Cypher HTTP API,您可以将相同的Cypher语句传递给API。
引用this section of the doc,这是最简单的方法示例:
在一个请求中开始并提交事务如果没有必要 保持一个事务跨多个HTTP请求打开,你可以开始一个 只使用一个HTTP进行事务,执行语句和提交 请求。
示例请求
- POST
http://localhost:7474/db/data/transaction/commit
- 接受:
application/json; charset=UTF-8
内容类型:
application/json
{ "statements" : [ { "statement" : "CREATE (n) RETURN id(n)" } ] }
回复示例
- 200:好的
内容类型:
application/json
{ "results" : [ { "columns" : [ "id(n)" ], "data" : [ { "row" : [ 6 ], "meta" : [ null ] } ] } ], "errors" : [ ] }