【问题标题】:How to delete all collections and documents in ArangoDb如何删除 ArangoDb 中的所有集合和文档
【发布时间】:2016-01-17 18:16:58
【问题描述】:

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

我知道我们可以直接从 REST API 中删除数据库,但文档中提到创建和删除可能“需要一段时间”。

这是进行这种设置的推荐方法,还是有 AQL 语句来做类似的事情?

【问题讨论】:

    标签: arangodb


    【解决方案1】:

    在遇到类似需求后,我找到了这个解决方案:

    for (let col of db._collections()) {
    
        if (!col.properties().isSystem) {
            db._drop(col._name);
        }
    }
    

    【讨论】:

    • 大型集合有时会超时。不过,它非常适合小型收藏。
    【解决方案2】:

    例如,您可以检索all collections(不包括系统)和droptruncate 的列表。后者将删除所有文档并保留索引。或者,您可以使用AQL REMOVE 声明。

    【讨论】:

    • 是使用您建议的 REST API 端点还是制作一个做同样事情的 AQL 查询更好?
    • 我不知道直接在 AQL 中删除或截断集合的支持,但是您可以通过 Arango shell 使用此功能 - docs.arangodb.com/Collections/CollectionMethods.html
    • 使用单个 AQL 查询来删除所有集合是行不通的,因为 AQL 仅适用于 DML(数据操作),而不适用于 DDL(数据定义)。因此,AQL 不支持“删除收集”操作。因此,如果您打算从客户端应用程序创建/删除,则需要使用 HTTP RESET API 或客户端驱动程序提供的创建/删除功能。
    • 值得注意的是,帖子中的链接实际上不再指向有用的地方。
    • @SlaterTyranus 感谢您的告知。我更新了链接。
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

      FOR u IN yourcollectionname
        REMOVE u IN yourcollectionname
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-19
        • 2020-09-08
        • 2021-01-08
        • 2018-11-01
        • 1970-01-01
        相关资源
        最近更新 更多