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".

Другие вопросы по тегам