Gremlin动态属性名拼接失效求助(TinkerPop3.4.3/Neptune)
问题原因与解决办法
问题根源
你遇到的核心问题是用错了字符串拼接的Gremlin步骤:union()的作用是合并多个遍历器的结果,它会输出两个独立的元素('p_' 和 顶点ID),而property()的属性名参数需要的是单个完整的字符串值。当Gremlin接收到多个元素作为属性名时,只会取第一个元素(也就是'p_'),这就是为什么属性名只有前缀没有拼接顶点ID的原因。
解决办法
把union()替换为专门用于字符串拼接的concat()步骤,它会将多个字符串参数合并成一个单一的字符串,完美契合你生成属性名的需求。
修改后的完整查询代码:
g.V('%s').as('source') .until(or(hasLabel('target').has('v', '1'), loops().is(10))) .repeat(__.in()) .outE('e').as('edge') .inV().as('u') .select('source') .property(single, 'v', '1') .property(single, concat(constant('p_'), select('u').id()), select('e').properties('r').value())
补充说明
在TinkerPop 3.4.x(对应你的Neptune版本)中,concat()支持接收多个字符串类型的遍历器参数,能够正确将'p_'和目标顶点ID拼接成类似p_vertexId123的属性名,这样就能实现你想要的“顶点ID加前缀作为属性名”的效果了。
内容的提问来源于stack exchange,提问作者Tiago Braga
相关产品推荐
相关产品推荐

