如何获取 AWS Neptune gremlin 查询以按 pricing_id 进行过滤

问题描述 投票:0回答:1

我有一个使用 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 发送这个。

提前谢谢你。

gremlin amazon-neptune gremlinpython
1个回答
1
投票

目前,虽然它有望在未来得到解决,但 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')) 
© www.soinside.com 2019 - 2024. All rights reserved.