Gremlin:具有静态和动态属性的名称

时间:2020-07-09 13:51:00

标签: gremlin tinkerpop amazon-neptune

我正在尝试使用选定的属性创建具有静态和动态值的顶点属性。这里的代码:

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版本相同。

谢谢!

1 个答案:

答案 0 :(得分:0)

此遍历中的union()步骤将不会返回您希望的前缀和属性的串联。相反,它将为union()中的每个项目返回单个遍历器。在这种情况下,一个包含“ p_”,一个包含id()和一个包含“ r”属性。

不幸的是,Gremlin没有字符串连接功能可以为您完成此操作。参见以下内容:

Concatenate Gremlin GraphTraversal result with string

当您使用Neptune时,由于Neptune不支持遍历中的lambda,因此该答案中提出的解决方案也不起作用。不幸的是,在这种情况下,完成此操作的最佳方法可能是将数据返回到您的应用程序,连接字符串,然后更新属性。