我正在学习如何在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上使用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'})])但不起作用。(我找不到关于这个主题的文档)我能做些什么来添加这个顶点?
发布于 2015-06-05 14:12:17
你没有说什么“不起作用”,但让我提供以下内容。您的addVertex语法看起来不太正确。暂时忘了mongodb:
graph.addVertex(1)添加一个具有指定id的顶点。当然,neo4j不支持用户提供的is,因此忽略了这个值。另一方面,如果你这样称呼它:
graph.addVertex([common_name:'Juventus'])在提供Groovy Map的情况下,您将创建一个顶点,其属性为"common_name“,该属性的值为”尤文图斯“。有了现在的语法:
graph.addVertex([db.team.find({common_name:'Juventus'})])您正在调用addVertex,所传递的参数是从mongo查找返回的任何内容的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,我会认为您的数据应该加载得很好。
此外,您应该考虑如何索引您的数据。由于无法分配标识符,因此需要创建索引,以便以独特的方式查找数据。
https://stackoverflow.com/questions/30665213
复制相似问题