MongoDB 到 neo4j - 建模

MongoDB to neo4j - modelling

我必须将此 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

这是一张图片:

第一件事是:
如何转换palmarès的信息?
我想到了两种可能:
1) 将此信息放入团队节点
2) 创建一个新节点,称为 palmarès,并设置关系的属性
你怎么看? 关于 started by 信息呢?放到team node是不是一个不错的选择?

我建议您将各个奖项表示为单独的节点,因为同一个奖项可以由不同年份的多个团队赢得。此外,对特定奖品的查询将更容易编写并且 运行 更快。

例如:

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

我认为将 "started_by" 放在团队节点中很好,但您可能希望将 year/month/day 存储为单个整数(例如,纪元日期),以便更容易执行 Cypher涉及日期的查询。

或者,如果您没有方便的方法将 year/month/day 转换为整数,您可以将它们组合成一个 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”。