Как использовать UNION_DISTINCT() или INTERSECTION() после устаревания NEIGHBORS()

Я новичок в ArangoDB и пытаюсь воспроизвести результаты https://docs.arangodb.com/3.0/cookbook/Graph/ExampleActorsAndMovies.html Оказывается, что функции, подобные NEIGHBORS(), устарели в 3.0. Существует руководство по миграции https://docs.arangodb.com/3.0/cookbook/AQL/MigratingEdgeFunctionsTo3.html с которым мне удается получить

db._query("RETURN NEIGHBORS(movies, actsIn, 'TheMatrix', 'any')").toArray();

снова работать как

db._query("FOR x IN ANY 'movies/TheMatrix' actsIn RETURN x._key").toArray();

Тем не менее, я в недоумении, как использовать UNION_DISTINCT или же INTERSECTION как RETURN оператор находится внутри цикла, а не снаружи. Кроме того, я не могу найти документацию по данным функциям где-нибудь?

Например: "Все актеры, которые действовали в обоих"movie1"И"movie2"?" был бы запрошен как

db._query("RETURN INTERSECTION(NEIGHBORS(movies, actsIn, 'TheDevilsAdvocate', 'any'), NEIGHBORS(movies, actsIn, 'TheMatrix', 'any'))").toArray();

который читается естественно из sql фона. Но как это сделать, используя вышеупомянутый цикл for?

Любая помощь приветствуется.

1 ответ

Решение

Вы можете найти документацию для этих функций здесь: https://docs.arangodb.com/3.0/AQL/Functions/Array.html

Ваш AQL для примера поваренной книги должен выглядеть следующим образом:

UNION_DISTINCT

db._query("FOR x IN UNION_DISTINCT ((FOR y IN ANY 'movies/TheMatrix' actsIn RETURN y), (FOR y IN ANY 'movies/TheDevilsAdvocate' actsIn RETURN y)) RETURN x._id").toArray()

INTERSECTION

db._query("FOR x IN INTERSECTION ((FOR y IN ANY 'movies/TheMatrix' actsIn RETURN y), (FOR y IN ANY 'movies/TheDevilsAdvocate' actsIn RETURN y)) RETURN x._id").toArray()

Другие вопросы по тегам