如何在NEIGHBORS()弃用后使用UNION_DISTINCT()或INTERSECTION()

时间:2016-07-25 14:00:05

标签: arangodb

我是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_DISTINCTINTERSECTION,因为RETURN语句位于循环内部,而不在外部。另外,我似乎无法在任何地方找到关于给定函数的任何文档?

例如:"所有演员都在" movie1" AND" movie2" ?"本来可以被查询为

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

自然地来自sql背景。但是如何使用上面提到的for循环呢?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

您可以在此处找到这些功能的文档:https://docs.arangodb.com/3.0/AQL/Functions/Array.html

您的AQL for cookbook-example应该如下所示:

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()

交会

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()