2017-04-20 36 views
0

我試圖刪除一段關係,並且這個小文檔錯誤顯示出來。Neo4j和java:這個錯誤是什麼「NULL不是鍵集合」是什麼意思?

查詢:

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"); 
} 

沒有任何文檔,它根本沒有任何幫助。

回答

0

我剛剛意識到鍵控集合的錯誤來自何處:在遍歷記錄的同時,我試圖打印關係的屬性,而該關係的屬性不存在。 (我從我的代碼的另一部分複製它沒有檢查它,並確信這是問題的查詢,所以我錯過了。)

1

我想這是因爲你試圖返回一個空對象,因爲你先刪除它。我會嘗試這個

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

您可以返回一個字符串,可以返回n如果有興趣在錢包已經關係刪除,或者你可以不返回任何東西。

+0

我只是試圖不刪除:'MATCH() - [r:SendTo ] - >(n:Wallet)WHERE NOT() - [r:BelongTo] - >(n)RETURN r'。仍然不起作用(同樣的錯誤)。引起我注意的原因是由於這樣的事實:當一個節點應該被刪除時,它不能被刪除,因爲與該節點相關的關係不會被刪除。 – Aqqqq

+0

@Aqqqq這是一個非常不同的查詢。你試圖將'r'與不同類型的兩個關係(:SendTo和:BelongTo)進行匹配。這是不可能的。 – InverseFalcon

+0

您可以隨時刪除關係,而無需先將其分開。但是,在刪除節點時,應始終使用'DETACH DELETE'而不是單獨刪除。 – InverseFalcon

2

正如Tomaz所說,這是因爲您無法返回剛刪除的節點或關係。

但是,您可以獲取節點或關係的地圖「快照」,刪除節點或關係,然後返回快照。

以下是知識庫中的article

+0

我剛試過沒有刪除:MATCH() - [r:SendTo] - >(n:Wallet)WHERE NOT() - [r:BelongTo] - >(n)RETURN r。仍然不起作用(同樣的錯誤)。引起我注意的原因是由於這樣的事實:當一個節點應該被刪除時,它不能被刪除,因爲與該節點相關的關係不會被刪除。 – Aqqqq