在 gremlin 中,如何按投影进行过滤?
In gremlin, how do you filter by a projection?
如果我有这样一行的查询:
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 的所有内容。我试过执行这样的过滤步骤,但是 'count' 是一个投影而不是一个值,所以它没有为我工作:
.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')
看起来您的想法是正确的,但使用 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]
如果我有这样一行的查询:
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 的所有内容。我试过执行这样的过滤步骤,但是 'count' 是一个投影而不是一个值,所以它没有为我工作:
.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')
看起来您的想法是正确的,但使用 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]