neo4j在一个查询中创建更多关系

时间:2014-12-18 21:32:42

标签: neo4j cypher

我想在一个查询中从一个节点创建更多重播

MATCH (n:Type) WHERE n.user = "usr2" 
MATCH (p:Test) WHERE p.name = "test1"
CREATE (n)-[:CONTAINS {amount:5}]->(p)
MATCH (p1:Test) WHERE p1.name = "test2"
CREATE (n)-[:CONTAINS {amount:-7}]->(p1)

但我的语法无效。

还有其他方法吗?

MATCH (n:Type) WHERE n.user = "usr2"
MATCH (p:Test) WHERE p.name = "test1"
CREATE (n)-[:CONTAINS {amount:5}]->(p); 
MATCH (n:Type) WHERE n.user = "usr2" 
MATCH (p:Test) WHERE p1.name = "test2"
CREATE (n)-[:CONTAINS {amount:-7}]->(p);

因为这对许多记录来说似乎不是很有效。

2 个答案:

答案 0 :(得分:2)

这个怎么样?事先匹配并在之后创建?

MATCH (n:Type) WHERE n.user = "usr2" 
MATCH (p:Test) WHERE p.name = "test1"
MATCH (p1:Test) WHERE p1.name = "test2"
CREATE n-[:CONTAINS {amount:5}]->p
CREATE n-[:CONTAINS {amount:-7}]->p1

答案 1 :(得分:2)

如错误消息所示,请在创建后使用WITH:

MATCH (n:Type) WHERE n.user = "usr2" 
MATCH (p:Test) WHERE p.name = "test1"
CREATE (n)-[:CONTAINS {amount:5}]->(p)
WITH n
MATCH (p1:Test) WHERE p1.name = "test2"
CREATE (n)-[:CONTAINS {amount:-7}]->(p1)
  1. 确保在:Type(user):Test(name)
  2. 上有索引/约束
  3. 使用参数
  4. 使用简单的语句,但其中许多语句然后cypher可以缓存执行计划
  5. 使用cypher transactional endpoint
  6. 在单个http请求中执行许多简单语句