首页 > 解决方案 > Gremlin:具有静态和动态的属性名称

问题描述

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

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

谢谢!

标签: gremlintinkerpopamazon-neptune

解决方案


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

不幸的是,Gremlin 没有可以为您完成此任务的字符串连接函数。见下文:

将 Gremlin GraphTraversal 结果与字符串连接起来

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


推荐阅读