【问题标题】:Gremlin Order Pattern And Edge Update Using LoopGremlin 顺序模式和使用循环的边缘更新
【发布时间】:2018-12-06 18:25:04
【问题描述】:

我正在尝试遍历顶点上的任意数量的边并将当前迭代器/循环计数分配给边。我该怎么做呢?

伪代码 g.V(12345).outE('contains').loop{through all outE contains edges}{__.property('ordinal',it.loopCount)}

类似的东西?

【问题讨论】:

    标签: gremlin janusgraph


    【解决方案1】:

    1开头:

    gremlin> g.V(1).outE().
               groupCount("x").
                 by(constant("c")).
               property("ordinal", select("x").select("c")).iterate()
    gremlin> g.V(1).outE().valueMap(true)
    ==>[id:9,weight:0.4,ordinal:1,label:created]
    ==>[id:7,weight:0.5,ordinal:2,label:knows]
    ==>[id:8,weight:1.0,ordinal:3,label:knows]
    

    要从0 开始,您需要做一些额外的工作:

    gremlin> g.withSideEffect("x", ["c": 0L]).V(1).outE().
               property("ordinal", select("x").select("c")).
               groupCount("x").
                 by(constant("c")).iterate()
    gremlin> g.V(1).outE().valueMap(true)
    ==>[id:9,weight:0.4,ordinal:0,label:created]
    ==>[id:7,weight:0.5,ordinal:1,label:knows]
    ==>[id:8,weight:1.0,ordinal:2,label:knows
    

    【讨论】:

    • 我知道...我看到 .count("x").incr("x").set("x", 1, sum) 即将出现。一般来说,我们需要一些全局计数器或标量值。
    【解决方案2】:

    您可以使用sack() 来完成此操作。例如,我将使用 TinkerPop 附带的“现代”玩具图:

    gremlin> g.withSack(0).V(1).
    ......1>   repeat(outE().
    ......2>          sack(sum).
    ......3>            by(constant(1)).
    ......4>          property('loops',sack()).
    ......5>          inV())
    gremlin> g.V(1).outE().valueMap()
    ==>[weight:0.4,loops:1]
    ==>[weight:0.5,loops:1]
    ==>[weight:1.0,loops:1]
    gremlin> g.V(1).outE().inV().outE().valueMap()
    ==>[weight:1.0,loops:2]
    ==>[weight:0.4,loops:2]
    

    所以sack() 基本上会保留循环计数,您可以将其分配给您的边缘。

    【讨论】:

    • 非常感谢。我需要第一个结果是:==> [weight:0.4, ordinal:0] ==> [weight:0.4, ordinal:1] ==> [weight:0.4, ordinal:2] 仍然在学习我的图表方式,所以我可能会以错误的方式思考它。再次感谢。我有一个查询按我想要的顺序获取边缘,但需要使用我称为 ordinal 的属性在边缘上显式设置该顺序。
    • 如果您需要“序数”边缘属性值从 0 开始,则使用 withSack(-1) 定义初始 sack 值,这样当它在第一个循环上递增时,sack() 值以 @ 递增987654327@ 到 0。
    猜你喜欢
    • 2013-05-06
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多