1

我必须将此 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,并设置关系上的属性
你怎么看?又如何信息开始?放在团队节点是不是一个不错的选择?

4

1 回答 1

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”。

于 2015-06-05T20:40:46.730 回答