【问题标题】:Neo4j and java: What does this error "NULL is not a keyed collection" mean?Neo4j 和 java:这个错误“NULL 不是键控集合”是什么意思?
【发布时间】:2017-04-20 04:53:21
【问题描述】:

我尝试删除关系,但出现了这个很少记录的错误。

查询:

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)

查看对应关系时,没有任何属性为空:

<id>:595 value_bitcoin:20000000000outputIndex:defaultuniqueReferenceTran:bcaeee45968b5a08c88ed7a0d90a1275728eda356013465408197e9f77c634daNULLtranHashString:bcaeee45968b5a08c88ed7a0d90a1275728eda356013465408197e9f77c634datime:2016-01-01T22:55:26type:pubkeyhashvalue_dollar:86554.0estChanAddr:3KgtbGgaX2ngstNpvyv7LwpHSweVeqGbpM

我查看了 ValueAdapter.class,这是相关代码:

@Override
public Value get( String key )
{
    throw new NotMultiValued( type().name() + " is not a keyed collection" );
}

没有任何文档,它根本没有帮助。

【问题讨论】:

    标签: java neo4j cypher


    【解决方案1】:

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

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

    这是知识库中的article

    【讨论】:

    • 我刚试过不删除: MATCH ()-[r:SendTo]->(n:Wallet) WHERE NOT ()-[r:BelongTo]->(n) RETURN r.仍然不起作用(同样的错误)。之所以引起我的注意,是因为当一个节点应该被删除时,由于与该节点关联的关系没有被删除,所以无法删除。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我刚试过不删除:MATCH ()-[r:SendTo]-&gt;(n:Wallet) WHERE NOT ()-[r:BelongTo]-&gt;(n) RETURN r。仍然不起作用(同样的错误)。之所以引起我的注意,是因为当一个节点应该被删除时,由于与该节点关联的关系没有被删除,所以无法删除它。
    • @Aqqqq 这是一个非常不同的查询。您正在尝试将r 匹配到两个不同类型的关系(:SendTo 和:BelongTo)。这是不可能的。
    • 您可以随时删除关系,而无需先将其分离。但是,在删除节点时,您应该始终使用DETACH DELETE 而不是单独删除。
    • 对不起,我刚刚尝试了更正的版本:MATCH ()-[r:SendTo]-&gt;(n:Wallet) WHERE NOT ()-[:BelongTo]-&gt;(n) RETURN r。还是一样的错误。
    • @aqqqq 该查询没有任何问题。你用的是什么版本的 Neo4j?
    【解决方案3】:

    我才意识到keyed collection的错误来自哪里:在遍历记录时,我试图打印关系的一个属性,而这个关系的属性不存在。 (我从我的代码的另一部分复制它而没有检查它,并确信这是问题所在的查询。所以我错过了。)

    【讨论】:

      猜你喜欢
      • 2015-02-10
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多