我想通过网络浏览器提交一份分号分隔的Cypher写入语句列表,但我收到错误...
MERGE (a:user{id: 'A'})
MERGE (b:product{id: '1'})
CREATE UNIQUE (a)-[:USED_BY]->(b);
MERGE (a:user{id: 'B'})
MERGE (b:product{id: '4'})
CREATE UNIQUE (a)-[:USED_BY]->(b);
我正在创建新节点并在后面的关系语句中引用它们,所以我想提交单独的查询而不是一个长的查询,我想通过Cypher这样做。
最好的方法是什么?
答案 0 :(得分:8)
我在Multiple unrelated queries in Neo4j Cypher?
找到了解决方案只需将WITH count(*) as dummy
放在独立命令之间。
答案 1 :(得分:3)
答案 2 :(得分:2)
这不是一个错误,而是预期的行为(截至撰写本文时,例如Neo4j 2.2及更早版本)。
Neo4j浏览器运行作为单个查询输入的每个命令,并显示该查询的结果。它不支持多个查询(或隐含的多组结果!)。
请注意,可以使用neo4j shell运行多个查询,正如您尝试的那样。每个单独命令的结果将写入stdout。示例在文档中:http://neo4j.com/docs/stable/shell-sample-session.html
答案 3 :(得分:0)
据我所知,不可能直接进行,但是如果你有python你可以安装py2neo然后使用一个非常简单的代码段,它使用了neo4j的REST api,即
from py2neo import cypher
session = cypher.Session("http://localhost:7474/db/data/")
tx = session.create_transaction()
cypher = [
"MERGE (a:user{id: 'A'})"
"MERGE (b:product{id: '1'})"
"CREATE UNIQUE (a)-[:USED_BY]->(b)", #first statement
"MERGE (a:user{id: 'B'})"
"MERGE (b:product{id: '4'})"
"CREATE UNIQUE (a)-[:USED_BY]->(b)" #second statement
]
for q in cypher:
tx.append(q)
tx.commit()
这将完成这项工作。
答案 4 :(得分:0)
将所有Cypher语句转换为一行,并在每个语句之间放置一个空格。这适用于neo4j浏览器控制台。
答案 5 :(得分:0)
我相信 apoc.cypher.runMany 会成功。
CALL apoc.cypher.runMany(statement, {})
(我正在通过 Python 驱动程序对此进行尝试。稍后我将根据我的发现更新这篇文章。)