没有节点的Neo4j关系会抛出错误

时间:2016-02-18 09:29:46

标签: neo4j cypher

由于无法预料的关机(和/或我的代码中的错误),我在数据库中没有连接节点的关系。

我认为发生的事情是使用MATCH语句查找节点,然后使用MERGE创建关系。但是由于某些原因,Match没有返回结果,但MERGE确实创建了一个关系(显然是与一个非现有节点)。见下面的例子:

MATCH (image:Image {id:{param}.id}) FOREACH (tagName in {param}.tags | MERGE (tag:Tag {tag:tagName}) MERGE (image)-[:IS_TAGGED_AS]->(tag) // Here it creates a relationship even if no matching image is found. )

当我运行简单查询时,我收到以下消息:

While loading relationships for Node[xx] a Relationship[xx] was encountered that had startNode: 0 and endNode: 0, i.e. which had neither start nor end node as the node we're loading relationships for

我可以通过Id引用节点和关系(尽管关系不会返回结果)但不能删除它们。

我能做些什么来解决这个问题吗?

理想情况下,我会创建一个查询来选择所有“不好”的内容。关系并删除它们。

我正在研究Neo4j 2.3.0。

1 个答案:

答案 0 :(得分:0)

您确定可以在没有节点的情况下创建关系吗?这对我没有意义。 MERGE的工作方式是匹配节点或关系(如果存在),否则会尝试创建一个新节点。

如果在Neo4j浏览器中将PROFILE添加到查询的开头,则可以查看查询的执行计划。您将看到首先匹配节点,然后匹配和/或创建关系。

相关问题