gremlin - 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 版本相同。
谢谢!
解决方案
此遍历中的 union() 步骤不会像您希望的那样返回前缀和属性的串联。相反,它将为 union() 中的每个项目返回一个遍历器。在这种情况下,一个包含“p_”,一个包含 id(),一个包含“r”属性。
不幸的是,Gremlin 没有可以为您完成此任务的字符串连接函数。见下文:
将 Gremlin GraphTraversal 结果与字符串连接起来
当您使用 Neptune 时,该答案中建议的解决方案也不起作用,因为 Neptune 不支持遍历中的 lambda。不幸的是,在这种情况下,实现此目的的最佳方法可能是将数据返回到您的应用程序,连接字符串,然后更新属性。