2013-12-19 201 views
0

我试图筛选节点:使用过滤器的边缘/顶点

user = g.v(42); 

g.idx('comparisons')[[id:Neo4jTokens.QUERY_HEADER + '*']] 
.filter{ 
    if (it.out('COMPARED_VALUE1').in('VOTED').in('VOTES').next().equals(user)) 
    { 
     return true; 
    } 
    return false; 
}.count(); 

我真的不明白管道是如何工作的,但我明白,下一个()打破东西过滤器“循环”。

我应该得到2个结果,但我没有得到。

Regards,

+0

你想达到什么目的? –

回答

0

你想达到什么目的?

对不起,我的gremlin知识接近零这些天。

在暗号它可能看起来像这样

START user=node(42), comp=node:comparisons("id:*") 
MATCH comp-[:COMPARED_VALUE1]->()<-[:VOTED*2]-(user) 
RETURN count(*) 
1

我可能需要修改我的答案,因为我可能需要你正在努力实现(如@迈克尔还要求)什么更多的细节,但如果你认为你的问题是next(),然后考虑以下几点:

user = g.v(42); 

g.idx('comparisons')[[id:Neo4jTokens.QUERY_HEADER + '*']] 
.filter{it.out('COMPARED_VALUE1').in('VOTED').in('VOTES').next().equals(user)}.count(); 

首先,注意上面,你的封过滤器可以立即降低到(这将产生同样的错误,当然)。考虑到过滤器关闭,你假设当你使用next()时,用户顶点将从管道中流出。情况可能并非如此。因此,我会重新写一个过滤器封口:

user = g.v(42); 

g.idx('comparisons')[[id:Neo4jTokens.QUERY_HEADER + '*']].filter{ 
    def p = it.out('COMPARED_VALUE1').in('VOTED').in('VOTES') 
    p.hasNext() ? p.next().equals(user) : false 
}.count(); 

这应该会解决你的问题就在那里因为你只需要在管道p评估的第一项假设这是你有效地什么在做之前。我想知道,如果你不能简单地使用except/retain pattern这里得到答案,因为它是少了几分令人费解:

user = g.v(42); 

g.idx('comparisons')[[id:Neo4jTokens.QUERY_HEADER + '*']] 
    .out('COMPARED_VALUE1').in('VOTED').in('VOTES').retain([user]) 
    .count(); 

希望的东西在这里把你在正确的轨道,以你的答案上。

相关问题