gremlin - Gremlin GroovyTranslator 生成错误结果并在远程服务器上失败
问题描述
我正在使用 Gremlin java,我发现 GroovyTranslator在符号\
之前添加了额外的内容$
,这导致查询无法在远程服务器上执行。
GraphTraversal traversal = graph.addV().property("amount", "$1");
System.out.println(GroovyTranslator.of("g").translate(traversal.asAdmin().getBytecode()));
翻译结果:
g.addV().property("amount","\$1")
如果这是 GroovyTranslator 的问题,我可以替换
\$
为$
,但我不确定更多特殊字符是否会出现此问题。由于反斜杠而失败,但是如果某些属性值想要使用反斜杠怎么办?
据我所知,使用反斜杠总是会失败。
我想以下应该工作,但它没有:curl -X POST -d '{"gremlin":"g.V().has(\"key\",\"\\$\")"}' ...
解决方案
在 Groovy 中,如果您使用的是 Groovy 字符串 (GStrings),则美元符号具有特殊含义。它用于指示插值应该发生,如下所示:
gremlin> a=3
==>3
gremlin> "The number is $a"
==>The number is 3
如果您要连接的服务器按原样使用 Groovy 来解析查询,则需要使用反斜杠。如果服务器没有按原样使用 Groovy,那么您将需要删除反斜杠。
使用 GroovyTranslator 还需要注意其他一些事项。(int) 3
当它生成文字数字时,它会在查询中放入诸如此类的强制转换。根据您连接到的后端图形数据库,您可能还需要删除这些。
推荐阅读
- tensorflow - Tensorflow:在 tf.gradients() 期间忽略特定依赖项
- r - 如何从 coxph 中提取极小的 p 值而不将其舍入为 0?
- css - 如何在 Material UI 中设置下拉菜单位置
- excel - 工作簿刮板问题
- python - 如何防止matplotlib中轴偏移的科学记数法?
- c++ - 基于循环的多成员 constexpr struct 初始化
- javascript - atom.io:通过 Javascript 注释中的可点击链接打开文件
- python - 使用 unstack() 进行 Pandas Groubpy 绘图
- swift - 如何将 UIColor 转换为黑白 UIColor
- python - 对于未运行 PSET6 DNA CS50x 的循环