Обновление AQL успешно выполняется в цикле сбора, но выдает ошибку «Не найдено» при обходе графа. - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь выяснить, как обновить граничные документы, используя запрос обхода графа в arangodb. Я могу сделать это с помощью стандартного FOR e IN collectionName UPDATE e with {newProps} IN collectionName. Однако я не могу понять, что не так с моей попыткой сделать то же самое, используя FOR v, e, p IN 1..5 OUTBOUND @startId GRAPH @graphName синтаксис.

Я использую изображение док-станции arangodb: latest на macOS Mojave 10.14.3, и я использую библиотеку go arango (github.com/arangodb/go-driver) для запроса, создав строку запроса и отправив ее с помощью базы данных Функция .Query (). Я попытался просто вернуть ключ для ребра, которое я пытаюсь обновить (т.е. просто вернуть e._key вместо попытки обновления в приведенном ниже запросе), и подтвердил, используя arangosh, что это действительно правильный ключ ребра, который я пытаюсь обновить. Кроме того, как указано выше, я смог обновить ребро, используя реляционный синтаксис AQL.

Вот мой запрос:

FOR v, e, p IN 1..5 OUTBOUND @startId GRAPH @graphName
    FILTER e.@key0 == @val0
    UPDATE e._key WITH {@propName0: @propValue0} IN has_skill
    RETURN {new: NEW, old: OLD}

и вот мои переменные связывания:

[graphName:Matthew_Loughney, key0:_from, propName0:testProp, propValue0:testVal, startId:applicant/232, val0:applicant/232]

Я ожидаю, что при просмотре коллекции has_skill с использованием arangosh я увижу, что теперь у моего края есть свойство testProp со значением testVal; однако вместо этого я просто получаю ошибку AQL: document not found (while executing), и мое преимущество остается неизменным.

1 Ответ

0 голосов
/ 09 апреля 2019

Оказалось, что мой фильтр возвращал некоторые ребра, не входящие в коллекцию has_skill (всего 4, если быть точным), поэтому, когда он попытался обновить в has_skill, он преуспел для того, который я хотел, но не смог для другие 3, и поскольку операция UPDATE является атомарной, что привело к сбою для всех из них. Я не заметил этого, потому что я смотрел только на первое возвращенное ребро, когда смотрел на ключи, и это не было проблемой в моем запросе FOR e IN collectionName, потому что, очевидно, все они находятся в правильной коллекции, так что возвращал только 1 край, который я искал.

...