2015-06-05 41 views
1

我必須將這個mongoDB文檔轉換爲neo4j。 這是文檔的示例:MongoDB to neo4j - 建模

{ 
    "_id" : "Atl.02", 
    "official_name" : "Club Atletico de Madrid S.A.D.", 
    "common_name" : "Atletico Madrid", 
    "country" : "Spain", 
    "started_by" : { 
     "day" : 26, 
     "month" : 4, 
     "year" : 1903 
    }, 
    "stadium" : { 
     "name" : "Vicente Calderón", 
     "capacity" : 54907 
    }, 
    "palmarès" : { 
     "La Liga" : 10, 
     "Segunda Division" : 1, 
     "Copa del Rey" : 10, 
     "Supercopa de Espana" : 2, 
     "UEFA Europa League" : 2, 
     "UEFA Cup Winners Cup" : 1, 
     "UEFA Super Cup" : 2, 
     "FIFA Club World cup" : 1 
    }, 
    "uniform" : "blue, white and red" 
} 

我創建了一個團隊節點:

CREATE (n:team {_id:"Atl.02", official_name:"Club Atletico de Madrid S.A.D.", 
common_name:"Atletico Madrid", country:"Spain", 
started_by_day: 26, started_by_month:4, started_by_year:1903, 
uniform:"blue, white and red"}) 

的體育館節點:

CREATE (n:stadium {name:"Vicente Calderòn", capacity:54907}) 

球隊和球場之間的關係:

MATCH (n:team), (n1:stadium) WHERE n._id="Atl.02" AND 
n1.name="Vicente Calderòn" CREATE n-[r:PLAYS]->n1 

這裏有一個畫面:
enter image description here

的第一件事是:
如何關於棕櫚城的信息轉換?
我認爲兩種可能性:
1)把團隊節點
2)創建一個新的節點信息,稱爲棕櫚城,並在關係
您如何看待設置的屬性? 而且約信息?將它放入團隊節點是一個不錯的選擇嗎?

回答

2

我建議您將各個獎項表示爲單獨的節點,因爲多個團隊可以在不同年份獲得相同的獎金。此外,針對特定獎品的查詢會更容易編寫和運行。

例如:

(team:team {_id:"Atl.02"})-[:AWARDED {count: 10}]->(prize:Prize {name: "La Liga"}) 

我覺得把「started_by」在Team節點是好的,但你可能希望存儲的年/月/日爲一個整數(例如,一個劃時代日期)使涉及日期的Cypher查詢更容易。或者,如果您沒有方便的方法將年/月/日轉換爲整數,則可以將它們組合爲8個字符的字符串(年,月,日)。這裏是如何做到這一點的例子:

WITH 1993 AS year, 01 AS month, 16 AS day 
RETURN 
    TOSTRING(year) + 
    (CASE WHEN month < 10 THEN "0" + month ELSE month END) + 
    (CASE WHEN day < 10 THEN "0" + day ELSE day END) 
    AS date; 

產生的date是:「19930116」。

+0

偉大的提示。我怎樣才能把日期寫成一個整數?例如,16/01/1993 - > 1611993? – DistribuzioneGaussiana

+0

查看我的更新答案,瞭解如何使用字符串代替整數。 – cybersam