用Neo4j撈取資料的一些小技巧:以SWAPI為例
在網路上已經有許多neo4j匯入外部資料的教學影片,這裡嘗試分享一些Cypher的撰寫技巧,用以解決幾個匯入時會遇到的小問題。 SWAPI 是 (:Starwars Fan :ProgrammingGeek) 應該都熟知的API,它提供不少星戰電影中的資訊(雖然不是最多...只有正史、而且只到 第七部曲 ):例如Planets(行星)、Spaceships(太空船)、Vehicles(太空船之外的交通工具)、People(人物)、Films(影片)、以及Species(種族)等等。 常見的撈取資料寫法大致像是這樣: WITH ' https://swapi.co/api/people/?format=json' AS url CALL apoc.load.json(url) YIELD value UNWIND value.results AS p CREATE (n: StarWarsPerson ) SET n.name=p.name, n.height=p.height, n.mass=p.mass... RETURN n; 問題一、API一次只給一部份資料 不過這裡遇到一個問題,許多API都不會一次給你所有的資料,以SWAPI為例,資料庫明明有87個人,但若不指定號碼的話,它只會吐給你前十個;除非你指定人物編號、一個一個撈出來,例如 WITH ' https://swapi.co/api/people/ 88 /?format=json' AS url CALL apoc.load.json(url) YIELD value AS p CREATE (n: StarWarsPerson ) SET n.name=p.name, n.height=p.height, n.mass=p.mass RETURN n; 指定88號,我們得到了 Captain Phasma 。 除非運用programming language API(例如Java API),否則要一個一個撈還挺煩的。不過畢竟Neo4j還是有一點迴圈的能力,所以如果我們用下面這個小技巧,以動態產生網址的方式就可以解決掉第一個問題: UNWIND range( 1 , 88 ) AS i CALL apoc....