2017-04-25 117 views
0

我創建了很多帶有幾個屬性值爲NULL的節點(也許它的值是「」),現在我想刪除所有屬性。我無法使用其屬性名稱逐步刪除屬性。 更新1: 當我呼籲瀏覽器match(u:User) return properties(u),它返回: enter image description here通過Cypher刪除不知道屬性名稱的節點的屬性

+0

'null'永遠不會是Neo4j中的屬性值,這表示不存在。你可以顯示你用來檢測這些有問題的屬性的查詢嗎? – InverseFalcon

+0

對不起。它的值是帶字符串值的「」。當我在瀏覽器上獲得財產時,它返回的財產是空的 –

回答

0

啊,沒關係,這些都是空字符串值,你猜。

我們需要一個圖表範圍的查詢,它將查找具有空字符串屬性的節點。這將不得不觸及所有節點的所有屬性,因此在更大的圖上可能會很昂貴。

至於動態去除這些,Cypher對這種操作沒有很好的支持。但是,如果您可以安裝APOC Procedures,那麼我們可以輕鬆清除這些屬性。

我在這個查詢中使用的方法是在節點的鍵上使用過濾器/提取,並創建一個到null的鍵的配對,作爲具有空字符串值的所有鍵的兩元素列表。

然後,我們將使用apoc.map.fromPairs()生成地圖這些鍵爲空值,則使用節點,將所有這些地圖值適用於該節點的屬性,因爲設置屬性有效去除這些屬性在+=操作至null與刪除它相同。

MATCH (u:User) // if you want this run for all nodes, remove the label 
WITH u, [key in keys(u) WHERE u[key] = '' | [key, null]] as nullifiers 
WHERE size(nullifiers) <> 0 
WITH u, apoc.map.fromPairs(nullifiers) as nullifyMap 
SET u += nullifyMap 
+0

好的!非常感謝! –