Gremlin 逐步使用groovy不会提取某些节点的值

Gremlin 逐步使用groovy不会提取某些节点的值,gremlin,tinkerpop3,janusgraph,groovy-console,Gremlin,Tinkerpop3,Janusgraph,Groovy Console,问题描述如下: g.V().has("p_v_name", "d8e5d39d63c580acdb3eb188a1f4a942"). repeat(__.bothE().otherV().simplePath()). times(3).emit(). has('p_v_tag'). path(). by( __.project("label", "id", "p_v_black_tag"). by(__.label()). by(__.id()). by(__.c

问题描述如下:

g.V().has("p_v_name", "d8e5d39d63c580acdb3eb188a1f4a942").
repeat(__.bothE().otherV().simplePath()).
times(3).emit().
has('p_v_tag').
path().
by(
    __.project("label", "id", "p_v_black_tag").
    by(__.label()).
    by(__.id()).
    by(__.choose(__.has('p_v_tag'),
                __.properties('p_v_tag').project('value').by(__.value()).fold(),
                __.constant([])
                )
    )
).unfold()

gremlin> g.V(1871880949872).properties('p_v_tag')
==>vp[p_v_tag->outdated]
我想找到一些感兴趣的路径并获得顶点或边的相应属性,我使用的groovy如下所示:

g.V().has("p_v_name", "d8e5d39d63c580acdb3eb188a1f4a942").
repeat(__.bothE().otherV().simplePath()).
times(3).emit().
has('p_v_tag').
path().
by(
    __.project("label", "id", "p_v_black_tag").
    by(__.label()).
    by(__.id()).
    by(__.choose(__.has('p_v_tag'),
                __.properties('p_v_tag').project('value').by(__.value()).fold(),
                __.constant([])
                )
    )
).unfold()

gremlin> g.V(1871880949872).properties('p_v_tag')
==>vp[p_v_tag->outdated]
上面的代码给出了以下结果:

==>[label:v_user_key,id:749577404608,p_v_tag:[[value:PR016],[value:PR033],[value:PR068]]]
==>[label:e_application_id,id:4jjrk79js-9kcn170g-8ph-nvxhl4s0,p_v_tag:[]]
==>[label:v_application_id,id:1871880949872,p_v_tag:[]]
结果被展开以便于阅读。这只是一条由两个节点和一条边组成的路径。源节点有一个属性p_v_标记,它具有多个属性。问题是目标节点也有属性p_v_标记,但代码不输出值

我检查了目标节点是否具有属性p_v_标记,并且它不是空的,如下所示:

g.V().has("p_v_name", "d8e5d39d63c580acdb3eb188a1f4a942").
repeat(__.bothE().otherV().simplePath()).
times(3).emit().
has('p_v_tag').
path().
by(
    __.project("label", "id", "p_v_black_tag").
    by(__.label()).
    by(__.id()).
    by(__.choose(__.has('p_v_tag'),
                __.properties('p_v_tag').project('value').by(__.value()).fold(),
                __.constant([])
                )
    )
).unfold()

gremlin> g.V(1871880949872).properties('p_v_tag')
==>vp[p_v_tag->outdated]

我一遍又一遍地阅读这份文件,但我想不出如何正确处理它,有人能帮我或给我一些建议吗?

我不知道为什么这样做行不通。如果您尝试使用此解决方案来替换:

by(__.choose(__.has('p_v_tag'),
            __.properties('p_v_tag').project('value').by(__.value()).fold(),
            __.constant([])
            )
与:


谢谢你@stephen mallette,你的答案很有效。我正在使用0.2.0版的janus graph,最近我将它升级到了0.3.1版,这是我过去使用的方法。所以这似乎是一个与版本相关的问题。对于版本0.3.1,选择和合并步骤都有效。