如何删除ArangoDb中的所有集合和文档

How to delete all collections and documents in ArangoDb

我正在尝试使用 Arango 组合单元测试设置。为此,我需要能够围绕每个测试重置测试数据库。

我知道我们可以直接从 REST 中删除数据库 API 但是文档中提到创建和删除可以 "take a while".

这是否是进行此类设置的推荐方法,或者是否有 AQL 语句来执行类似的操作?

例如,您可以检索 all collections (excluding system ones) and drop or truncate them. The latter will remove all documents and keep indexes. Alternatively you can use AQL REMOVE 语句的列表。

创建数据库可能确实需要一段时间(几秒钟)。如果在为每个测试设置和拆除环境的单元测试设置中成本太高,则有以下选项:

  • 每个测试套件(包含多个测试)仅创建和删除一次专用测试数据库,并且 create/drop 每个测试所需的集合。在许多情况下,这已证明足够快,但这取决于每个测试套件中包含多少测试。

  • 不创建和删除专用的测试数据库,而是只让每个测试创建和删除所需的集合。这是最快的选项,如果您在新数据库中开始每个测试 运行 应该足够好。但是,它需要测试才能正确清理所有内容。这通常没有问题,因为无论如何测试通常都会使用专用集合。图数据有一个例外:创建命名图会将图描述存储在 _graphs 集合中,并且必须再次从那里删除图。

执行以下 AQL 查询删除集合中的所有文档 yourcollectionname:

FOR u IN yourcollectionname
  REMOVE u IN yourcollectionname

https://docs.arangodb.com/3.0/AQL/Operations/Remove.html

在为类似的需求苦苦挣扎之后,我找到了这个解决方案:

for (let col of db._collections()) {

    if (!col.properties().isSystem) {
        db._drop(col._name);
    }
}