Javascript neo4j多重匹配合并生成关系失败

Javascript neo4j多重匹配合并生成关系失败,javascript,typescript,neo4j,cypher,Javascript,Typescript,Neo4j,Cypher,我有节点类型a、b、c,其中每个类型可以有一个或多个类型(包括它自己的类型)。在一个事务中,我合并文件中的所有节点,然后在下一个事务中匹配节点并尝试创建它们的关系 以下cypher语句成功,没有失败,但也没有创建我期望的关系: MATCH(a:TypeA) WHERE a.name = {nameA} MATCH(b:TypeB) WHERE b.name = {nameB} MATCH(c:TypeC) WHERE c.name = {nameC} MATCH(d:TypeA) WHERE

我有节点类型a、b、c,其中每个类型可以有一个或多个类型(包括它自己的类型)。在一个事务中,我合并文件中的所有节点,然后在下一个事务中匹配节点并尝试创建它们的关系

以下cypher语句成功,没有失败,但也没有创建我期望的关系:

MATCH(a:TypeA) WHERE a.name = {nameA}
MATCH(b:TypeB) WHERE b.name = {nameB}
MATCH(c:TypeC) WHERE c.name = {nameC}
MATCH(d:TypeA) WHERE d.name = {nameD}
MERGE(a)-[:has_a]->(d)
MERGE(a)-[:has_b]->(b)
MERGE(a)-[:has_c]->(c)

如果我将上述cypher语句缩小到第一个匹配项、任何其他匹配项以及单个关系合并,则它将按预期工作,例如:

MATCH(a:TypeA) WHERE a.name = {nameA}
MATCH(b:TypeB) WHERE b.name = {nameB}
MERGE(a)-[:has_b]->(b)


是否有我不知道的密码格式或限制?

您能自己找到
nameC
nameD
节点吗?例如,
是否匹配(c:TypeC),其中c.name={nameC}返回c返回结果?@cybersam是的,它会为您上次匹配的
d
检查相同的结果,并注意您在该行中使用了
:键入一个
标签…这是正确的还是键入错误?从我们到目前为止收集的信息来看,前3行与节点匹配,因此剩余的罪魁祸首是与
d
的匹配。如果失败,那么就没有行可以执行剩余的密码。此外,您还可以分析您的查询,查找导致0行的操作。@InverseFalcon,
d
匹配为type
:TypeA
是正确的。a
-[:has_type_a]->
d有效。对于cypher和neo4j来说,我是相当陌生的,我没有意识到,如果它在单个match语句中没有返回匹配项,那么它将停止执行。这是正确的思考方式吗?如果是这样的话,可能我必须选择匹配整个组,因为不保证任何关系,但在我的分析过程中,所有这些都是可能的。@Jordan.J.D可能不是,因为一旦匹配到不存在此类节点的位置,将不会有行继续执行,所以查询的其余部分将不会执行。当您不确定节点是否存在时,请依赖可选匹配。