将mongo文档添加为顶点 - Gremlin

时间:2015-06-05 11:19:01

标签: mongodb neo4j gremlin

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

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'})])

但它不起作用。 (我无法找到有关此主题的文档)如何添加此顶点?

1 个答案:

答案 0 :(得分:0)

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

graph.addVertex(1)

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

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

在您提供Groovy Map的地方,您将使用属性" common_name"创建一个顶点。以及尤文图斯"的财产价值。使用现在的语法:

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

您正在调用addVertex,并且您传递的参数是从您的mongo db查找返回的任何Groovy List。我认为Neo4j只是忽略了这个论点,为什么它看起来没什么用。

鉴于你的数据是嵌套的,我认为你必须稍微转换一下这些数据才能直接进入Neo4j(我并不认为Neo4j支持Map作为数据类型)。所以要添加一个顶点,我想你会想做类似的事情:

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

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

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

将变成"体育场名称"和"体育场容量"。使用展平Map,我认为您的数据应该非常好地加载。

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