MongoDB to neo4j - моделирование
Я должен преобразовать этот документ mongoDB в 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
Вот картинка:
Во-первых, это:
как конвертировать информацию о пальмаре?
Я думал две возможности:
1) поместить эту информацию в командный узел
2) создайте новый узел с именем palmarès и установите свойства отношения
Как вы думаете? И как насчет информации? Это хороший выбор, чтобы поместить его в командный узел?
1 ответ
Я рекомендую вам представлять отдельные призы как отдельные узлы, поскольку один и тот же приз может быть выигран несколькими командами в разные годы. Кроме того, запросы на конкретные призы было бы легче писать и выполнять быстрее.
Например:
(team:team {_id:"Atl.02"})-[:AWARDED {count: 10}]->(prize:Prize {name: "La Liga"})
Я думаю, что помещать "start_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".