添加一个 mongo 文档作为顶点 - Gremlin

Add a mongo document as vertex - Gremlin

我正在学习通过 MongoDB 使用 Gremlin。我想从名为 Project 的 mongo 数据库开始创建一个 Neo4j 图形。

import com.gmongo.GMongo
gremlin> mongo = new GMongo()
==>com.gmongo.GMongo@5c08c46a
gremlin> db = mongo.getDB("Project")
==>DB{name='Project'}
gremlin> Graph graph = new Neo4jGraph("/tmp/my_graph");
==>neo4jgraph[EmbeddedGraphDatabase [\tmp\my_graph]]

现在我可以在 Gremlin shell 上使用 mongo 命令。

项目数据库有一个名为 team 的集合。团队合集文档如下:

{
    "_id" : "Juv.35",
    "official_name" : "Juventus Football Club S.p.A.",
    "common_name" : "Juventus",
    "country" : "Italy",
    "started_by" : {
        "day" : 1,
        "month" : 11,
        "year" : 1897
    },
    "stadium" : {
        "name" : "Juventus Stadium",
        "capacity" : 41011
    },
    "palmarès" : {
        "Serie A" : 33,
        "Coppa Italia" : 10,
        "Supercoppa Italiana" : 6,
        "UEFA Champions League" : 3,
        "UEFA Europa League" : 3,
        "UEFA Super Cup" : 2,
        "UEFA Intertoto cup" : 1,
        "Cup Winners cup" : 1,
        "UEFA Intercontinental cup" : 2
    },
    "uniform" : "black and white"
}

现在我想在包含尤文图斯信息的变量图中添加一个顶点。 我试试这个:

gremlin> graph.addVertex([db.team.find({common_name:'Juventus'})])

但是不行。 (我找不到关于这个主题的文档)我该怎么做才能添加这个顶点?

你不说什么 "does not work" 但让我提供以下内容。 addVertex 的语法看起来不太正确。暂时忘记 mongodb:

graph.addVertex(1)

添加具有指定 id 的顶点。当然,neo4j 不支持用户提供的 ID,因此该值将被忽略。另一方面,如果你这样称呼它:

graph.addVertex([common_name:'Juventus'])

在您提供 Groovy Map 的地方,您将创建一个具有 属性 "common_name" 的顶点和 属性 的值 "Juventus".使用您现在的语法:

graph.addVertex([db.team.find({common_name:'Juventus'})])

您正在调用 addVertex 并且您传递的参数是 Groovy List 从 mongo 数据库查找返回的任何内容。我认为 Neo4j 只是完全忽略了这个论点以及为什么它看起来没有任何作用。

鉴于您的数据是嵌套的,我认为您必须对该数据进行一些转换才能将其直接导入 Neo4j(我认为 Neo4j 不支持 Map 作为数据类型)。所以要添加一个顶点,我想你会想要做这样的事情:

transformToMap = { record -> ... }
graph.addVertex(transformToMap(db.team.find({common_name:'Juventus'})))

其中 transformToMap 是您编写的某个函数,它采用嵌套结构并将其展平。所以像这样:

"stadium" : {
    "name" : "Juventus Stadium",
    "capacity" : 41011
},

会变成 "stadium-name" 和 "stadium-capacity"。使用扁平的 Map 我认为您的数据应该加载得很好。

另外,您应该考虑如何为您的数据编制索引。由于您无法分配标识符,因此您需要创建索引以便以独特的方式查找数据。