【问题标题】:Convert a MongoDB with two collections in a neo4j graph在 neo4j 图中转换具有两个集合的 MongoDB
【发布时间】:2015-06-04 17:47:29
【问题描述】:

我完成了我的 Mongo 数据库的创建。它是在两个集合上制作的:

1. team
2. coach

我给你一个这些集合中包含的文档的例子:

这是一份团队文件:

{
    "_id" : "Mil.74",
    "official_name" : "Associazione Calcio Milan S.p.A",
    "common_name" : "Milan",
    "country" : "Italy",
    "started_by" : {
        "day" : 16,
        "month" : 12,
        "year" : 1899
    },
    "stadium" : {
        "name" : "Giuseppe Meazza",
        "capacity" : 81277
    },
    "palmarès" : {
        "Serie A" : 18,
        "Serie B" : 2,
        "Coppa Italia" : 5,
        "Supercoppa Italiana" : 6,
        "UEFA Champions League" : 7,
        "UEFA Super Cup" : 5,
        "Cup Winners cup" : 2,
        "UEFA Intercontinental cup" : 4
    },
    "uniform" : "black and red"
}

这是一份教练文件:

{
    "_id" : ObjectId("556cec3b9262ab4f14165fcd"),
    "name" : "Carlo",
    "surname" : "Ancelotti",
    "age" : 55,
    "date_Of_birth" : {
        "day" : 10,
        "month" : 6,
        "year" : 1959
    },
    "place_Of_birth" : "Reggiolo",
    "nationality" : "Italian",
    "preferred_formation" : "4-2-3-1",
    "coached_Team" : [ 
        {
            "team_id" : "RMa.103",
            "in_charge" : {
                "from" : "26/june/2013",
                "to" : "25/may/2015"
            },
            "matches" : 119
        }, 
        {
            "team_id" : "PSG.00",
            "in_charge" : {
                "from" : "30/dec/2011",
                "to" : "24/june/2013"
            },
            "matches" : 77
        }, 
        {
            "team_id" : "Che.11",
            "in_charge" : {
                "from" : "01/july/2009",
                "to" : "22/may/2011"
            },
            "matches" : 109
        }, 
        {
            "team_id" : "Mil.74",
            "in_charge" : {
                "from" : "07/nov/2001",
                "to" : "31/may/2009"
            },
            "matches" : 420
        }
    ]

如您所见,我使用了标准化模型:每个教练都有一系列受过教练的团队。 我想把这个Mongo数据库转换成图形数据库,特别是Neo4j;我的目标是表明在这个高度连接的领域中,neo4j 比 Mongo 有更好的性能(例如查询:“找到 Carlo Ancelotti 执教的所有球队的成绩单,在 mongo 中需要两个查询,而在 neo4j 中就足够了关注关系)。
我在论坛上找到了this guide,它使用 Gremlin 将 mongo 文档集合自动转换为 neo4j 图。
问题是该指南只讨论了一个集合。
那么,是否可以从我的 mongo 数据库(有两个集合)开始自动生成 neo4j 图,还是必须“手动”创建图?

【问题讨论】:

    标签: mongodb neo4j gremlin


    【解决方案1】:

    Gremlin 是一种用于处理图形的领域特定语言,但它基于 Groovy,因此您实际上拥有所有想要的灵活性,可以真正做任何想做的事情。换句话说,你可以用一个 MongoDB 集合做什么,你可以很容易地用两个(或者你有多少集合)来做。这就是另一篇 answers 中引用的博文的重点:

    http://thinkaurelius.com/2013/02/04/polyglot-persistence-and-query-with-gremlin/

    Gremlin 是一种将数据转换为图形形式的出色语言,无论其源格式是什么。我认为您首先将所有团队加载为顶点,然后遍历您的教练,在您进行时为相关团队创建教练顶点和边。

    我还要补充一点,Gremlin 没有什么是“自动的”。并不是说您告诉 Gremlin 您在 MongoDB 中有数据,然后它会将其转换为图表。您必须编写 Gremlin 来告诉它您希望如何将 MongoDB 数据转换为图表。

    【讨论】:

    • 好的,谢谢您的回答。我认为 Gremlin 从 mongo 创建图表 -.- 所以如果我使用 neo4j v2.2.2 或 Gremlin 创建图表,有什么区别?
    • 嗯,我想你现在明白了,无论你使用什么工具,你都必须编写一些代码来构建你的图表。我不知道 Neo4j 的任何特定工具可以简化从 mongodb 读取数据。因此,您几乎可以编写一些针对 neo4j java API 的 java 代码,或者可能将您的 mongo 数据按摩成密码可以导入的东西(即 csv)。使用 gremlin,您可以有效地做同样的事情(即编写程序),但我希望您能从博文中看到所涉及的直观开发模式。
    • 你是对的。好的,我会尝试使用 Gremlin。我有一个问题,我打开了一个新话题。你能看看吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-07-13
    • 2019-01-28
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2017-11-10
    相关资源
    最近更新 更多