g.V()
.has('atom', '_value', 'red').fold()
.coalesce(unfold(), addV('atom').property('_value', 'red')).as('atom')
.out('view').has('view', '_name', 'color').fold()
.coalesce(unfold(), addE('view').from('atom').to(addV('view').property('_name', 'color')))
Выдает мне ошибку:
The provided traverser does not map to a value: []->[SelectOneStep(last,atom)] (597)
Что это значит?
Таким образом, когда за as()
следует fold()
, он удаляет переменную, установленную на шаге as()
. Вместо этого я использовал aggregate()
следующим образом:
g.V()
.has('atom', '_value', 'red')
.fold().coalesce(
unfold(),
addV('atom').property('_value', 'red')
)
.aggregate('atom')
.out('view').has('view', '_name', 'color')
.fold().coalesce(
unfold(),
addE('view')
.from(select('atom').unfold())
.to(addV('view').property('_name', 'color'))
.inV()
)
Шаг as()
известен как шаг снижения барьера. При уменьшении шагов барьера любая история пути запроса (например, применение метки через as()
) теряется. При уменьшении ступеней барьера многие пути сводятся к одному пути. После этого шага не было бы возможности узнать, какая из множества исходных помеченных вершин будет правильной для извлечения.
Добавление к этому на случай, если кто-то еще столкнется с этим.
Эта конкретная ошибка возникает, когда вы используете идентификатор в виде строки в from()
вместо объекта вершины.
Чтобы понять, что я имею в виду, в качестве простого теста запустите следующий запрос гремлина:
g.addE('view').from('atom').to(addV('view').property('_name', 'color'))
затем запустите этот запрос:
g.addE('view').from(V('atom')).to(addV('view').property('_name', 'color'))
Первый запрос выдаст указанную выше ошибку, второй — нет.