我正在学习使用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'})])
但它不起作用。 (我无法找到有关此主题的文档)如何添加此顶点?
答案 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
,我认为您的数据应该非常好地加载。
此外,您应该考虑如何索引数据。由于您无法分配标识符,因此您需要创建索引,以便以独特的方式查找数据。