添加一个 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
我认为您的数据应该加载得很好。
另外,您应该考虑如何为您的数据编制索引。由于您无法分配标识符,因此您需要创建索引以便以独特的方式查找数据。
我正在学习通过 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
我认为您的数据应该加载得很好。
另外,您应该考虑如何为您的数据编制索引。由于您无法分配标识符,因此您需要创建索引以便以独特的方式查找数据。