变量 - Neptune 上的 Gremlin

4

我正在使用Gremlin控制台,连接到AWS Neptune数据库。

g.V().hasLabel('Risk').toList()

可以得到预期结果,但当我试图将结果赋值给一个变量时:

risks = g.V().hasLabel('Risk').toList()

我会得到下面的消息,很明显是因为"token recognition error"在变量名称上引发了错误,因为当我更改变量名称时,消息中的位置和“at”部分也会随之改变。

{"requestId":"650d7c4b-44d1-43f8-b9a3-fbf085cc3ead","code":"MalformedQueryException","detailedMessage":"Query parsing failed at line 1, character position at 3, error message : token recognition error at: 'ks'"}

我在Tinkerpop数据库上尝试了同样的操作,变量赋值起作用了。我错过了什么?


1
刚在https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-differences.html#feature-gremlin-differences上发现“Neptune不支持Gremlin变量,也不支持绑定属性”的说明。我想这就是我的答案了。 - Paul C
1个回答

6

正如您所注意到的,在使用控制台以:remote console模式连接到Neptune时,无法分配变量。您可以尝试在本地模式下与服务器连接并发出查询,例如:> g.V().limit(1),查询结果将通过控制台维护的特殊变量result进行访问。以下是一个简单的示例:

gremlin> :> g.V().count()
==> 3653
gremlin> result
==> result{object=3653 class=java.lang.String}
gremlin println result['object']
[3653]
gremlin> r = result['object'][0]
gremlin> println r
3653

以下是一个以列表形式呈现结果的示例。

gremlin> :> g.V('1','2').values('city').toList()
==>Atlanta
==>Anchorage
gremlin> result
==>result{object=Atlanta class=java.lang.String}
==>result{object=Anchorage class=java.lang.String}
gremlin> result.each {println "City was : " + it['object']}
City was : Atlanta
City was : Anchorage

当你无法赋值变量时,如果你想在控制台中使用Groovy来后处理一些结果,我发现这很有用。


是否可以通过 :> 传递变量? - James Render
2
我不这么认为,@JamesRender。我尝试使用Groovy插值"${a}"类型的东西,但我认为整个文本字符串只是传递给服务器,没有进行任何插值。 - Kelvin Lawrence

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接