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

时间:2013-11-08 21:32:14

标签: neo4j 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'
}

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

此致

1 个答案:

答案 0 :(得分:2)

您需要在过滤器中接下来()您的管道。它应该是:

.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'}

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