我有一个使用 gremlin_python 的工作查询,如下所示(简化以关注问题)
client.graph.V().as_('origin') \
.outE().as_('p1r1') \
.inV().as_('midpoint') \
.outE().has('pricing_id', select('p1r1').pricing_id).as_('p1r2')
.inV().
所以在这里,我有 2 个边(p1r1 和 p1r2),我只是检查 p1r1 的值是否等于 p1r2 的相同值。
我如何在 gremlin 中重写它以允许这样做?到目前为止,我有以下但我无法让 select('p1r1').pricing_id 工作。它不喜欢符号的“.pricing_id”部分。
"gremlin" :"g.V().as('origin') \
.outE().as('p1r1') \
.inV().as('midpoint') \
.outE().has('pricing_id', select('p1r1').pricing_id).as('p1r2')
.inV().
作为参考,我通过 AWS Neptune 的 gremlin API 发送这个。
提前谢谢你。
目前,虽然它有望在未来得到解决,但 Apache TinkerPop Gremlin 不允许以下形式的查询:
has(key,<some-traversal>)
所有允许的是:
has(key,<P predicate>)
例如:
has(key,eq('123ABC'))
如果你尝试这样的事情:
has(key,select('x'))
查询不会总是出错,这取决于你如何发出它(文本与字节码),但它永远不会做它看起来应该做的事。
需要重写查询以使用
where...by
语法。
例如,在您的具体情况下:
outE().as('x').
where(eq('x')).
by('pricing_id').
by(select('p1r1').values('pricing_id'))