AWS Neptune Gremlin查询:如何匹配两条边的pricing_id?
修正适配AWS Neptune的Gremlin查询
你遇到的问题是因为select('p1r1').pricing_id属于Gremlin-Python特有的属性访问语法,而AWS Neptune遵循标准Gremlin遍历器规范,不支持这种写法。可以通过以下两种标准Gremlin语法修正查询:
方案一:使用values()提取属性值
将.pricing_id替换为values('pricing_id'),明确提取边p1r1的pricing_id属性值:
client.graph.V().as_('origin') \ .outE().as_('p1r1') \ .inV().as_('midpoint') \ .outE().has('pricing_id', select('p1r1').values('pricing_id')).as_('p1r2') \ .inV()
方案二:使用where()做属性比对(推荐)
这种写法更符合Gremlin的遍历逻辑,可读性更强,直接通过where和by步骤比对两条边的pricing_id属性:
client.graph.V().as_('origin') \ .outE().as_('p1r1') \ .inV().as_('midpoint') \ .outE().as_('p1r2') \ .where(eq('p1r1')).by('pricing_id') \ .inV()
说明
标准Gremlin中,不能通过对象属性访问的方式(如.pricing_id)获取元素属性,必须通过values()步骤提取,或使用where结合by完成属性相等性校验。后者不仅更符合Gremlin的设计思想,在复杂遍历中也更易于维护。
内容的提问来源于stack exchange,提问作者user3637771
相关产品推荐
相关产品推荐

