当没有边的节点存在时,Neo.DatabaseError.General.UnknownError

时间:2017-12-20 09:02:15

标签: neo4j cypher graph-databases

让我们考虑具有2个节点标签(UserMovie)和1种关系类型(RATES)的Neo4j数据库。我有一些用户节点没有连接到任何电影节点。

让我们考虑以下问题:

MATCH (u1:User) OPTIONAL MATCH (u1:User)-[r1:RATES]->() OPTIONAL MATCH ()<-[r1:RATES]-(u2:User) RETURN u1.name, u2.name

我同意查询可能看起来不太有用但我想理解为什么当Neo.DatabaseError.General.UnknownError个节点没有任何边缘时它会抛出User异常,但是当没有这样的节点时它会起作用。 据我了解,它应该为每个u null返回Useru

当从上一个查询的开头删除MATCH (u1:User) OPTIONAL时,即使存在没有任何关系的User个节点,它也不会抛出异常。

MATCH (u1:User)-[r1:RATES]->() OPTIONAL MATCH ()<-[r1:RATES]-(u2:User) RETURN u1.name, u2.name

但是,对于每个u User至少有一个关系,它会返回u。 但我希望在没有关系的情况下获得null个节点User

有人能解释一下为什么我们在第一个查询中得到异常并且是否有另一种方法可以达到相同的预期结果?

1 个答案:

答案 0 :(得分:1)

我遇到了完全相同的问题,答案是你在OPTIONAL MATCH子句中使用相同的变量用于两个关系,在这种情况下r1

如果第一个OPTIONAL MATCH成功,一切都应该有效,但如果它不匹配,第二个OPTIONAL MATCH将导致此错误。

这就是为什么当您更改为r2时,即使第一个可选匹配可能不匹配也是如此。