我有一张图表显示知道(Conhece)其他人的人(Leitor)。所以我在cypher控制台上创建了一个trasaction,如下所示:
: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"
} ]
}
但最终结果这个人(Leitor)Gutierrez不认识Matheus。为什么呢?
答案 0 :(得分:2)
如果这是您用于创建图表的单个查询,那么问题是您没有CREATE
语句定义Node Gutierrez的属性。对于古铁雷斯,只有CREATE (Gutierrez)-[:Conhece]->(Matheus)
和CREATE (Matheus)-[:Conhece]->(Gutierrez)
,指的是一个名为" Gutierrez"的变量。由于没有任何内容绑定到此变量,因此第一次使用它时将在图形中创建一个空白节点,并将该空白节点绑定到变量" Gutierrez"。
你有几种方法可以解决这个问题。一种是在查询开头为Gutierrez简单添加CREATE
语句:
CREATE (Gutierrez:Leitor {nome:'Gutierrez', completo: 'Full Name Here'})
...
这将创建具有上面定义的属性的节点,并将该节点绑定到变量" Gutierrez"对于其余的查询。
如果图表中可能已存在数据,但您可能希望使用MERGE
statement代替CREATE
:
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
语句中的条件的节点已存在,则该变量将绑定到该节点。如果没有,那么将创建一个新节点。