譯者言:本文介紹了在Neo4j中操作字典類型數(shù)據(jù)的三個APOC函數(shù)apoc.map.clean锨天, apoc.map.values晒杈, apoc.map.fromLists获询。
我們有這樣一個場景移层,需要創(chuàng)建一個節(jié)點筷笨,但節(jié)點的屬性要從一個字典對象中獲取憔鬼,這個如何實現(xiàn)呢?我們假設(shè)APOC庫已安裝胃夏。
首先轴或,我們創(chuàng)建一個包含有我Twitter信息的字典對象。
:param document => {
id: 14707949, name: "Mark Needham",
username: "markhneedham", bio: "Developer Relations @neo4j",
location: "London, United Kingdom", url: "http://www.markhneedham.com",
join_date: "8 May 2008", join_time: "5:58 PM",
tweets: 24710, following: 2479, followers: 5054, likes: 1014
}
譯者言:我們可以通過 :params 這個命令看到上面創(chuàng)建字典對象
我們要基于上面這些數(shù)據(jù)創(chuàng)建一個User節(jié)點仰禀,但是只想使用其中部分鍵值侮叮。此時,我們可以使用apoc.map.clean 函數(shù)刪除一些鍵悼瘾,下面代表顯示了我將刪除join_date 和 join_time 鍵囊榜。
WITH ["join_date", "join_time"] AS keysToRemove
RETURN apoc.map.clean($document, keysToRemove, []) AS result
刪除鍵是一種方法审胸,還有另一種方法是指定需要使用的鍵。 通過apoc.help('apoc.map') 能找到所有字典相關(guān)的方法卸勺,但是很不幸砂沛,并沒有發(fā)現(xiàn)取指定鍵值的方法。?
但是我們可以將兩個APOC函數(shù)組合起來使用完成這個效果曙求。首先使用apoc.map.values函數(shù)碍庵,將字典對象中一組指定鍵的值提取到一個數(shù)組中。
WITH ["name", "username", "bio", "following", "followers"] AS keysToKeep
RETURN apoc.map.values($document, keysToKeep)
然后悟狱,再使用apoc.map.fromLists 函數(shù)重構(gòu)出一個新的字典對象静浴。
WITH ["name", "username", "bio", "following", "followers"] AS keysToKeep
RETURN apoc.map.fromLists(keysToKeep, apoc.map.values($document, keysToKeep)) AS result
好,最后挤渐,我們再來看看文章開始的需求:創(chuàng)建一個結(jié)點苹享,使用一個字典中指定鍵的值作為該結(jié)點的屬性。代碼如下:
WITH ["name", "username", "bio", "following", "followers"] AS keysToKeep
MERGE (u:User {id: $document.id })
SET u += apoc.map.fromLists($keysToKeep, apoc.map.values($document, $keysToKeep))
OK浴麻,一切順利得问,希望這些能幫助到你。
原文鏈接:https://markhneedham.com/blog/2019/05/12/neo4j-keep-filter-keys-map-apoc/ 譯者言: 如果我的描述有不準(zhǔn)確或不清楚的地方软免,歡迎在文章下進行交流宫纬。