【问题标题】:Add a mongo document as vertex - Gremlin添加一个 mongo 文档作为顶点 - Gremlin
【发布时间】:2015-06-05 11:19:01
【问题描述】:

我正在学习将 Gremlin 与 MongoDB 结合使用。我想从一个名为 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'})])

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

【问题讨论】:

    标签: mongodb neo4j gremlin


    【解决方案1】:

    您没有说什么“不起作用”,但让我提供以下内容。 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 并且您传递的参数是一个 Groovy List 从您的 mongo db 查找返回的任何内容。我认为 Neo4j 只是完全忽略了这个论点以及为什么它看起来没有任何作用。

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

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

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

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

    会变成“体育场名称”和“体育场容量”。使用扁平化的Map,我认为您的数据应该可以很好地加载。

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

    【讨论】:

    • 使用指南我能够将团队 _id 添加为顶点:gremlin> mongo = new GMongo() ==>com.gmongo.GMongo@5c08c46a gremlin> db = mongo.getDB("Progettino") ==>DB{name='Progettino'} gremlin> x=[] as Set; db.team.find().each{x.add(it._id)} gremlin> g = new Neo4jGraph('/tmp/neo4j') gremlin> x.each{g.addVertex(it)} gremlin> g.V ==>v[815] ==>v[816] ==>v[817] ==>v[818] ==>v[819] ==>v[820] ==>v[821] 现在如何添加节点的属性?
    • 好的,我找到了如何设置属性:g.v(819).property='value_property' 是否可能没有关于这个主题的任何文档? BHA 只是尝试,尝试并尝试直到正确的方式。
    • ? - 我不确定你是什么意思。有大量的资源。怎么样:gremlin wikigremlindocs.comjavadoc 等等
    猜你喜欢
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多