Transactions 在neo4j上执行事务不适用于原始图形

Transactions 在neo4j上执行事务不适用于原始图形,transactions,neo4j,Transactions,Neo4j,我有一张图表显示了认识其他人的人(莱托)。因此,我在cypher控制台上创建了如下传输: :POST /db/data/transaction/commit { "statements" : [ { "statement" : "CREATE (Matheus:Leitor {nome:'Matheus', completo:'Matheus Silva'}) CREATE (Gutierrez)-[:Conhece]->(Matheus) CREATE (Matheus)-[

我有一张图表显示了认识其他人的人(莱托)。因此,我在cypher控制台上创建了如下传输:

:POST /db/data/transaction/commit
{
  "statements" : [ {
    "statement" : "CREATE (Matheus:Leitor {nome:'Matheus', completo:'Matheus Silva'}) CREATE (Gutierrez)-[:Conhece]->(Matheus) CREATE (Matheus)-[:Conhece]->(Gutierrez) CREATE (Jose:Leitor {nome:'Jose', completo:'Jose Silva'}) CREATE (Jose)-[:Conhece]->(Matheus) CREATE (Matheus)-[:Conhece]->(Jose) RETURN Matheus"
  } ]
}
但最终的结果是,古铁雷斯并不认识马修斯。为什么?


如果这是用于创建图形的单个查询,那么问题在于没有定义节点Gutierrez属性的
create
语句。对于古铁雷斯,只有
CREATE(Gutierrez)-[:Conhece]->(Matheus)
CREATE(Matheus)-[:Conhece]->(Gutierrez)
,指的是一个名为“Gutierrez”的变量。由于此变量未绑定任何内容,因此第一次使用它时将在图形中创建一个空白节点,并将该空白节点绑定到变量“Gutierrez”

你有几种方法可以解决这个问题。一种方法是在查询的开头添加一个
CREATE
语句:

CREATE (Gutierrez:Leitor {nome:'Gutierrez', completo: 'Full Name Here'})
...
这将使用上面定义的属性创建节点,并在查询的其余部分将该节点绑定到变量“Gutierrez”

如果数据可能已经存在于图形中,但是您可能希望使用而不是
创建

MERGE (Gutierrez:Leitor {nome:'Gutierrez'})
ON CREATE SET Gitierrez.completo = 'Full Name Here'
MERGE (Matheus:Leitor {nome:'Matheus'})
ON CREATE SET Matheus.completo = 'Matheus Silva'
...
MERGE
充当“获取或创建”的角色,将查找图中已存在的与模式匹配的节点。如果与
MERGE
语句中的条件匹配的节点已存在,则变量将绑定到该节点。如果没有,则将创建一个新节点