Gremlin :如何在过滤器闭包中使用链接顶点



>我有一个用户活动的链接列表,如下所示:

(user)-ACTIVITIES->(activity)-NEXT*->(activity)->...

每个活动节点都与一个源节点和一个目标节点相关

(theSource)<-SOURCE-(activity)-TARGET->(theTarget)

我想检索所有活动,并在源上有一个过滤器。如何使用源节点进行过滤?我想过滤活动,其中 source.email = 'someone@email.com'。此代码不起作用:/

g.v(1).out('ACTIVITIES')
.as('x')
.out('NEXT')
.loop('x'){it.loops <= 10}{true}
.filter{
    it.out('SOURCE').email == 'someone@email.com'
}

如何在过滤器闭包中使用链接节点进行过滤?这是一个好方法吗?

问候

你需要在过滤器中 next() 你的管道。 它应该是:

.filter{
    it.out('SOURCE').email.next() == 'someone@email.com'
}

如果没有next,您将在管道上执行永远不会返回 true 的相等。

作为一个额外的建议,我建议您更改循环中的 emit 闭包(第二个)。 发出闭包控制从管道中逃逸的项。 通过设置为true,就像您现在一样,它会发出所有内容,然后您正在应用过滤器。 更紧凑的方法是使您的遍历看起来像这样:

g.v(1).out('ACTIVITIES')
.as('x')
.out('NEXT')
.loop('x'){it.loops <= 10}{it.out('SOURCE').email.next() == 'someone@email.com'}

通过这种方式,您可以在发出闭包中处理过滤,而不是在管道的单独步骤中处理。

最新更新