Gremlin 如何通过in-edge属性值大于out-edge属性值来查询小精灵顶点

Gremlin 如何通过in-edge属性值大于out-edge属性值来查询小精灵顶点,gremlin,tinkerpop,Gremlin,Tinkerpop,在我的图中,我想得到gate3,由In-edge大于out-edge的幂和得到 我尝试了以下查询: g.V().where(inE().has("period",202006).values("power").sum().is(gt(outE().has("period",202006).values("power").sum()))).values("name") 但这导致了一个例外: Cannot compare '70' (Long) and '[VertexStep(OUT,edge)

在我的图中,我想得到gate3,由In-edge大于out-edge的幂和得到

我尝试了以下查询:

g.V().where(inE().has("period",202006).values("power").sum().is(gt(outE().has("period",202006).values("power").sum()))).values("name")
但这导致了一个例外:

Cannot compare '70' (Long) and '[VertexStep(OUT,edge), HasStep([period.eq(202006)]), PropertiesStep([power],value), SumGlobalStep]' (DefaultGraphTraversal) as both need to be an instance of Number or Comparable (and of the same type)
任何帮助都将不胜感激。谢谢

附加我的小精灵控制台脚本:

graph = TinkerGraph.open()
g = graph.traversal()
v6 = g.addV("gate").property("name", "gate1").next()
v0 = g.addV("trans").property("name", "trans0").next()
g.addE("consumed").from(v6).to(v0).property(id, 6).property("ammeter", 0).property("period",202006).property("power", 70)
v7 = g.addV("gate").property("name", "gate2").next()
v9 = g.addV("trans").property("name", "trans9").next()
g.addE("consumed").from(v7).to(v9).property("ammeter", 9).property("period",202006).property("power", -10)
v1 = g.addV("device").property("name", "device1").next()
v2 = g.addV("device").property("name", "device2").next()
v3 = g.addV("gate").property("name", "gate3").next()
g.addE("consumed").from(v0).to(v1).property("ammeter", 1).property("period",202005).property("power", 45)
g.addE("consumed").from(v0).to(v1).property("ammeter", 1).property("period",202006).property("power", 35)
g.addE("consumed").from(v0).to(v2).property("ammeter", 2).property("period",202006).property("power", 25)
g.addE("consumed").from(v0).to(v3).property("ammeter", 3).property("period",202006).property("power", 10)
g.addE("consumed").from(v9).to(v3).property("ammeter", 9).property("period",202006).property("power", 10)
v4 = g.addV("device").property("name", "device4").next()
v5 = g.addV("device").property("name", "device5").next()
g.addE("consumed").from(v3).to(v4).property("ammeter", 4).property("period",202006).property("power", 8)
g.addE("consumed").from(v3).to(v5).property("ammeter", 5).property("period",202006).property("power", 10)

也许有一种更优化的方法可以做到这一点

但是这个对我来说是最清楚的(代码方面)

如果只需要“门”顶点或特定顶点,则应在
where
步骤之前对其进行过滤


示例:

我想我应该避免使用
project()
并将
by()
调制器移动到
math()
,因为
project()
的结果只用于准备
math()
@noam621的输入。我想通过
g.V()过滤“设备”顶点。其中(project('inPower',outPower')。by(coalice)(inE().values('power').sum(),constant(0))).by(coalesce(outE().values('power').sum(),constant(99999999))).math('inPower-outPower')).is(gt(0))
它在gremlin 3.4.x中运行良好,但在3.3.x中不起作用
g.V().where(project('inPower', 'outPower').
      by(coalesce(inE().values('power').sum(),constant(0))).
      by(coalesce(outE().values('power').sum(),constant(0))).
    math('inPower - outPower').is(gt(0)))