处理可选字段时,使用inject在gremlin中进行长遍历

时间:2019-05-12 06:44:13

标签: graph-databases gremlin tinkerpop

我正在建立一个长遍历,以在一个查询中添加数百个顶点。我从官方网站上看到,推荐的方法是注入对象列表并在其中添加顶点:http://tinkerpop.apache.org/docs/current/recipes/#long-traversals

但是,在我的情况下,有很多具有可选字段的对象,以官方文档中的示例为例,可能有些人没有'age'属性或'name'属性,我可以使用select做这样的事情:

g.inject().unfold().as('a').addV().choose(select('a').select('age'), property('age', select('a').select('age')))

但是Neptune中的select步骤没有优化,这增加了查询的延迟,是否还有其他解决方案?

1 个答案:

答案 0 :(得分:1)

已经在gremlin-users邮件列表上回答了,但是为了结束循环,这里再次是:

gremlin> g = TinkerGraph.open().traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> 
gremlin> data = [["name": "Huimin Yang"],
                 ["name": "Daniel Kuppitz", "age": 37]]
==>[name:Huimin Yang]
==>[name:Daniel Kuppitz,age:37]
gremlin> 
gremlin> g.inject(data).unfold().as("m").
           addV("person").as("v").
           select("m").unfold().as("kv").
           select("v").
             property(select("kv").by(keys), select("kv").by(values)).iterate()
gremlin> 
gremlin> g.V().valueMap()
==>[name:[Huimin Yang]]
==>[name:[Daniel Kuppitz],age:[37]]