我正在尝试使用选定的属性创建具有静态和动态值的顶点属性。这里的代码:
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, union(constant('p_'),select('u').id()), select('e').properties('r').value())
此查询是将边的属性复制为值,将顶点的ID复制为具有前缀“ p_”的属性的名称。复制有效,但属性名称无效,仅保存前缀“ p _”。
对这种行为有任何想法吗?我使用的是Tinkerpop 3.4.3,与Neptune版本相同。
谢谢!
答案 0 :(得分:0)
此遍历中的union()步骤将不会返回您希望的前缀和属性的串联。相反,它将为union()中的每个项目返回单个遍历器。在这种情况下,一个包含“ p_”,一个包含id()和一个包含“ r”属性。
不幸的是,Gremlin没有字符串连接功能可以为您完成此操作。参见以下内容:
Concatenate Gremlin GraphTraversal result with string
当您使用Neptune时,由于Neptune不支持遍历中的lambda,因此该答案中提出的解决方案也不起作用。不幸的是,在这种情况下,完成此操作的最佳方法可能是将数据返回到您的应用程序,连接字符串,然后更新属性。