Я не уверен, что это все еще проблема для вас или нет, но мне интересно, не сработает ли это для вас:
gremlin> g = TinkerGraph.open().traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV('person').as('a').addE('self').to('a').property('x',[1,2,3]).select('a').addE('self').to('a').property('x',[10,20,30]).iterate()
gremlin> g.E().valueMap(true)
==>[x:[1,2,3],id:3,label:self]
==>[x:[10,20,30],id:4,label:self]
gremlin> g.V().outE('self').filter(local(values('x').unfold().is(2))).valueMap(true)
==>[x:[1,2,3],id:3,label:self]
По сути, вы можете развернуть local()
вашего свойства списка и затем отфильтровать его. Нептун, вероятно, не будет оптимизировать этот фильтр (например, использовать индекс), но если вы не фильтруете большое количество ребер, это может быть достаточным обходным путем (если он работает).
Обратите внимание, что я написал выше в Groovy, чтобы проверить это легко. В Python вы должны обратить внимание на некоторые незначительные изменения синтаксиса вокруг конфликтов имен. Следовательно, последний обход здесь будет написан так на python (потому что is
является зарезервированным словом в python):
g.V().outE('self').filter(local(values('x').unfold().is_(2))).valueMap(true)