Neo4j和java:这个错误是什么;NULL不是键控集合“;什么意思?

Neo4j和java:这个错误是什么;NULL不是键控集合“;什么意思?,java,neo4j,cypher,Java,Neo4j,Cypher,我试图删除一段关系,但出现了一个记录在案的小错误 查询: MATCH ()-[r:SendTo]-(n:Wallet) WHERE NOT ()-[:BelongTo]->(n) DELETE r RETURN r 整个错误输出: Exception in thread "main" org.neo4j.driver.v1.exceptions.value.NotMultiValued: NULL is not a keyed collection at org.neo4j.driver

我试图删除一段关系,但出现了一个记录在案的小错误

查询:

MATCH ()-[r:SendTo]-(n:Wallet)
WHERE NOT ()-[:BelongTo]->(n)
DELETE r
RETURN r
整个错误输出:

Exception in thread "main" org.neo4j.driver.v1.exceptions.value.NotMultiValued: NULL is not a keyed collection
at org.neo4j.driver.internal.value.ValueAdapter.get(ValueAdapter.java:192)
at basicANeo4j.Importer.<init>(Importer.java:213)
at basicANeo4j.Importer.main(Importer.java:246)

如果没有任何文档,它将毫无帮助。

我认为这是因为您试图返回一个空对象,因为您首先删除了它。我想试试这个

MATCH ()-[r:SendTo]-(n:Wallet)
WHERE NOT ()-[:BelongTo]->(n)
DELETE r
RETURN 'success'

您可以返回字符串,也可以返回n,如果您感兴趣的是哪个钱包删除了关系,或者您无法返回任何内容。

我认为这是因为您试图返回空对象,因为您首先删除了它。我想试试这个

MATCH ()-[r:SendTo]-(n:Wallet)
WHERE NOT ()-[:BelongTo]->(n)
DELETE r
RETURN 'success'

您可以返回字符串,也可以返回n,如果您感兴趣的是哪个钱包删除了关系,或者您无法返回任何内容。

正如Tomaz所说,这是因为您无法返回刚刚删除的节点或关系

但是,您可以获取节点或关系的映射“快照”,删除节点或关系,然后返回快照


以下是知识库中的示例。

正如Tomaz所说,这是因为您无法返回刚刚删除的节点或关系

但是,您可以获取节点或关系的映射“快照”,删除节点或关系,然后返回快照


以下是知识库中的属性。

我刚刚意识到键控集合的错误来自何处:在遍历记录时,我尝试打印关系的属性,而该关系的属性不存在。(我从代码的另一部分复制了它,但没有检查它,并且确信问题出在查询上。因此我错过了。)

我刚刚意识到键控集合的错误来自何处:在遍历记录时,我试图打印关系的属性,而此关系的属性不存在。(我从代码的另一部分复制了它,没有检查它,并且确信这是问题所在。因此我错过了。)

我只是尝试了不删除:
MATCH()-[r:SendTo]->(n:Wallet)WHERE NOT()-[r:BelongTo]->(n)返回r
。仍然不起作用(相同的错误)。引起我注意的原因是,当一个节点应该被删除时,它不能被删除,因为与该节点关联的关系没有被删除。@aqqq这是一个非常不同的查询。您正在尝试将
r
与两个不同类型的关系(:SendTo和:BelongTo)匹配。这是不可能的。您可以随时删除关系,而无需先分离它。但是,在删除节点时,应该始终使用
DETACH DELETE
而不是单独删除。很抱歉,我刚刚尝试了正确的版本:
MATCH()-[r:SendTo]->(n:Wallet)WHERE NOT()-[:BelongTo]->(n)返回r
。还是相同的错误。@aqqq该查询没有任何错误。您使用的是什么版本的Neo4j?我刚刚尝试了不删除:
MATCH()-[r:SendTo]->(n:Wallet)WHERE NOT()-[r:BelongTo]->(n)返回r
。仍然不起作用(相同的错误)。引起我注意的原因是,当一个节点应该被删除时,它不能被删除,因为与该节点关联的关系没有被删除。@aqqq这是一个非常不同的查询。您正在尝试将
r
与两个不同类型的关系(:SendTo和:BelongTo)匹配。这是不可能的。您可以随时删除关系,而无需先分离它。但是,在删除节点时,应该始终使用
DETACH DELETE
而不是单独删除。很抱歉,我刚刚尝试了正确的版本:
MATCH()-[r:SendTo]->(n:Wallet)WHERE NOT()-[:BelongTo]->(n)返回r
。还是相同的错误。@aqqq该查询没有任何错误。您使用的是什么版本的Neo4j?我刚刚尝试了删除:MATCH()-[r:SendTo]->(n:Wallet)WHERE NOT()-[r:BelongTo]->(n)返回r。仍然不起作用(相同的错误)。引起我注意的原因是,当一个节点应该被删除时,它无法被删除,因为与该节点关联的关系没有被删除。我只是在没有删除的情况下尝试了:MATCH()-[r:SendTo]->(n:Wallet)WHERE not()-[r:BelongTo]->(n)RETURN r。仍然不起作用(相同的错误)。引起我注意的原因是,当一个节点应该被删除时,它不能被删除,因为与该节点关联的关系没有被删除。
MATCH ()-[r:SendTo]-(n:Wallet)
WHERE NOT ()-[:BelongTo]->(n)
DELETE r
RETURN 'success'