我是 ArangoDB 新手,正在尝试重现 https://github.com/arangodb/docs/blob/28b266f143232beb17e5c35cd545d4f3909a1815/3.0/cookbook/graph-example-actors-and-movies.md的结果。
事实证明,像 NEIGHBORS() 这样的函数在 3.0 中已被弃用。有一个迁移指南https://github.com/arangodb/docs/blob/28b266f143232beb17e5c35cd545d4f3909a1815/3.0/cookbook/aql-migration-edge-functions-to3.md我设法得到
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
语句位于循环内部,而不是外部。另外,我似乎无法在任何地方找到有关给定函数的任何文档?
例如:“所有出演过“电影 1”和“电影 2”的演员?”会被查询为
db._query("RETURN INTERSECTION(NEIGHBORS(movies, actsIn, 'TheDevilsAdvocate', 'any'), NEIGHBORS(movies, actsIn, 'TheMatrix', 'any'))").toArray();
自然地从 sql 背景中读取。但是如何使用上述 for 循环来实现这一点呢?
任何帮助将不胜感激。
您可以在此处找到这些函数的文档:https://docs.arangodb.com/3.11/aql/functions/array/
您的食谱示例的 AQL 应如下所示:
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()
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()