【问题标题】:In gremlin, how do you filter by a projection?在 gremlin 中,如何通过投影进行过滤?
【发布时间】:2020-05-20 16:25:35
【问题描述】:

如果我有这样一行的查询:

project('faceId','count').

如何按预计计数过滤?

这是我正在使用的整个测试查询:

g.V().hasLabel('face').
......1>   project('faceId','count').
......2>     by('faceId').
......3>     by(where(without('a')).both('is similar').
......4>        where(without('a')).
......5>        store('a').
......6>        count())
==>[faceId:face1,count:4]
==>[faceId:face9,count:1]
==>[faceId:face2,count:0]
==>[faceId:face3,count:0]
==>[faceId:face4,count:0]
==>[faceId:face5,count:0]
==>[faceId:face6,count:1]
==>[faceId:face7,count:0]
==>[faceId:face8,count:0]

我正在尝试过滤掉任何计数为 0 的内容。我尝试过像这样的过滤步骤,但“计数”是一个投影而不是一个值,所以它对我不起作用:

.filter{it.count > 0} where(select('count').is.gt(0))

我也尝试在上述计数步骤的末尾添加.as('count'),但仍然没有成功。

** 测试图**

// The graph
graph = TinkerFactory.createModern()
g = graph.traversal()

g.addV('face').property('faceId','face1')
g.addV('face').property('faceId','face2')
g.addV('face').property('faceId','face3')
g.addV('face').property('faceId','face4')
g.addV('face').property('faceId','face5')
g.addV('face').property('faceId','face6')
g.addV('face').property('faceId','face7')
g.addV('face').property('faceId','face8')
g.addV('face').property('faceId','face9')

g.V().has('face','faceId','face1').as('a').V().has('face','faceId','face2').as('b').addE('is similar').from('a').to('b')
g.V().has('face','faceId','face1').as('a').V().has('face','faceId','face3').as('b').addE('is similar').from('a').to('b')
g.V().has('face','faceId','face1').as('a').V().has('face','faceId','face4').as('b').addE('is similar').from('a').to('b')
g.V().has('face','faceId','face1').as('a').V().has('face','faceId','face5').as('b').addE('is similar').from('a').to('b')
g.V().has('face','faceId','face2').as('a').V().has('face','faceId','face3').as('b').addE('is similar').from('a').to('b')
g.V().has('face','faceId','face2').as('a').V().has('face','faceId','face4').as('b').addE('is similar').from('a').to('b')
g.V().has('face','faceId','face5').as('a').V().has('face','faceId','face6').as('b').addE('is similar').from('a').to('b')
g.V().has('face','faceId','face6').as('a').V().has('face','faceId','face7').as('b').addE('is similar').from('a').to('b')
g.V().has('face','faceId','face8').as('a').V().has('face','faceId','face9').as('b').addE('is similar').from('a').to('b')

【问题讨论】:

    标签: graph gremlin tinkerpop


    【解决方案1】:

    看起来您的想法是正确的,但使用了gt 而不是P(即Predicate):

    gremlin> g.V().hasLabel('face').
    ......1>   project('faceId','count').
    ......2>     by('faceId').
    ......3>     by(where(without('a')).both('is similar').
    ......4>        where(without('a')).
    ......5>        store('a').
    ......6>        count()).
    ......7>   filter(select('count').is(gt(0)))
    ==>[faceId:face1,count:4]
    ==>[faceId:face9,count:1]
    ==>[faceId:face6,count:1]
    

    【讨论】:

    • 谢谢!这就是我需要的。我怎么会自己弄清楚,所以我知道下次如何找到这样的答案?
    • 好吧,在这种情况下,您只是将步骤误认为是谓词。我不确定谷歌会不会轻易提供帮助。也许查看步骤参数可能会有所帮助。有时查看 GraphTraversal 的 javadoc 以了解特定步骤需要哪些参数会有所帮助:tinkerpop.apache.org/javadocs/current/full/org/apache/tinkerpop/…
    • 谢谢!下次我一定会看看并这样做!
    猜你喜欢
    • 2021-11-20
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多