【问题标题】:Adding multiple vertices, changing one property-value (tinkerpop3 + python GLV)添加多个顶点,更改一个属性值(tinkerpop3 + python GLV)
【发布时间】:2019-04-08 20:48:33
【问题描述】:

我正在尝试缩小我的代码大小,但我需要几个此类数据的实例:

g.addV('A').property('a-type','thing-x').property('a-value',1).next()
g.addV('A').property('a-type','thing-x').property('a-value',2).next()
...   
g.addV('A').property('a-type','thing-x').property('a-value',n).next()

“a-value”最多为 n(例如 50)。

# I tried a version of a loop I found here 
# https://stackoverflow.com/questions/40907529/create-multiple-edges-having-vertex-id-number-0-to-49
# 
g.inject((0..<50).toArray()).as('i').addV('a-value',select('i')).iterate()

但我得到一个错误:

g.inject((0..<50).toArray()).as('i').addV('a-value',select('i')).iterate()
             ^
    SyntaxError: invalid syntax

这样做的正确方法是什么?

编辑:在尝试建立答案后,我只想为我的情况添加这一点,在 for 循环中调用 t.iterate() 会给出预期的结果,但如果在循环之外调用它则不是这样,如下所述。

【问题讨论】:

    标签: python loops gremlin tinkerpop gremlinpython


    【解决方案1】:

    您发现的示例在 Gremlin 控制台中使用,因此使用了 Groovy 构造。在 Python 中,您可以执行以下操作:

    for i in range(1,51):
        g.addV('test').property('mykey',i).iterate()
    

    但是,这将一次添加一个顶点,因此最好以类似于此的方式小批量编写它们。

    t = g.addV('test').property('mykey',1)
    for i in range(2,51):
        t.addV('test').property('mykey',i)
    t.iterate()
    

    【讨论】:

    • 非常感谢,这成功了!还是习惯了python和gremlin的不同用法。
    • 是否有一种优雅的方式在相邻节点之间添加边 - 例如在 2 和 1 和 3 之间,但不在 2 和 4 之间,依此类推。当然,我也可以创建一个单独的问题。
    • 将顶点和边 ID 保存在一个列表中并对其进行迭代并批量添加边是一种简单的解决方案。
    猜你喜欢
    • 2019-01-11
    • 2019-10-29
    • 1970-01-01
    • 2019-06-04
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多