【问题标题】:Verifying iterative edge insertion in Gremlinpython在 Gremlinpython 中验证迭代边缘插入
【发布时间】:2020-06-05 11:31:22
【问题描述】:

尝试迭代地添加顶点和边。它似乎有效,没有错误,但我希望验证边缘是否也正确添加。

下面的循环至少插入了节点,如最后打印的列表长度所示,但边缘要么 1)未插入,要么 2)将它们收集到列表中的方式不正确。

非常感谢任何帮助!

def vertices01(nodename, rangelb, rangeub, prop1name, prop1val, prop2name):
    t = g.addV(nodename).property(prop1name, prop1val).property(prop2name, rangelb)
    for i in range(rangelb + 1, rangeub):
        t.addV(nodename).property(prop1name, prop1val).property(prop2name, i)
    t.iterate()

def edges01(from_propname, from_propval, to_propname, rangelb, rangeub, edge_name, edge_prop1name):
    to_propval = rangelb
    edge_prop1val = rangelb
    t = g.V().has(from_propname, from_propval).as_("a").V().has(to_propname, to_propval).as_("b").addE(edge_name).from_("a").to("b").property(edge_prop1name, edge_prop1val)
    for i in range(rangelb, rangeub):
        to_propval = i + 1
        edge_prop1val = i
        # changing this to t.has(...) seems to not influence the results (still 0 picked up by the loop)
        t.has(from_propname, from_propval).as_("a").V().has(to_propname, to_propval).as_("b").addE(edge_name).from_("a").to("b").property(edge_prop1name, edge_prop1val)
    t.iterate()

vertices01("ABC", 1, 21, "aa01", 1, "bb01")
edges01("aa01", 1, "bb01", 1, 10 , "aa01-to-bb01", "aa01-to-bb01-propX")

ls1 = []
ls1 = g.V().outE("aa01-to-bb01").has("aa01-to-bb01-propX", 2).toList()
print(len(ls1)) 

ls2 = []
ls2 = g.V().has("aa01", 1).toList()
print(len(ls2)) 

> results:
0
20

预期结果:

> results:
1
20

编辑:我在 edges01 循环中更改了这一点:

    t = g.V().has(from_propname, from_propval) ...

    t.has(from_propname, from_propval) ...

但是结果还是0。

【问题讨论】:

    标签: tinkerpop janusgraph tinkerpop3 gremlinpython


    【解决方案1】:

    您每次都在添加边的代码中使用t = g.V()... 重新开始遍历。只有最后创建的遍历才会被迭代。在创建顶点的代码中,您正在扩展遍历。这就是区别。

    更新

    你应该能够按照这些思路做一些事情

    t = g.V().has('some-property','some-value').as_('a').
          V().has('some-property','some-value').as_('b')
    

    然后进入循环

    t.addE('myedge').from_('a').to('b')
    

    【讨论】:

    • 感谢开尔文的回答。我应该如何改进,我不确定我是否理解在顶点循环中扩展的区别,以及如何在边缘循环中实现类似的效果。再次感谢。
    • 如果我们退后一步,添加多重边的标准是什么?本质上是从同一个起始顶点添加多条边到同一个结束顶点,但每条边都有不同的(增量)属性吗?
    • 我用一个可以复制的简单模板更新了答案。希望对您有所帮助。
    • 感谢您的回复。我想知道循环外的遍历(t = g ...)开始处的“ as_('a') ”是否正在循环内更新?如果我将循环内的“a”分配给 i,是否会被反馈到“some-value”中(假设我已经分配了“some-property”并且这不会更新)?我希望这有点清楚......再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多