【发布时间】:2016-01-17 18:16:58
【问题描述】:
我正在尝试使用 Arango 进行单元测试设置。为此,我需要能够围绕每个测试重置测试数据库。
我知道我们可以直接从 REST API 中删除数据库,但文档中提到创建和删除可能“需要一段时间”。
这是进行这种设置的推荐方法,还是有 AQL 语句来做类似的事情?
【问题讨论】:
标签: arangodb
我正在尝试使用 Arango 进行单元测试设置。为此,我需要能够围绕每个测试重置测试数据库。
我知道我们可以直接从 REST API 中删除数据库,但文档中提到创建和删除可能“需要一段时间”。
这是进行这种设置的推荐方法,还是有 AQL 语句来做类似的事情?
【问题讨论】:
标签: arangodb
在遇到类似需求后,我找到了这个解决方案:
for (let col of db._collections()) {
if (!col.properties().isSystem) {
db._drop(col._name);
}
}
【讨论】:
例如,您可以检索all collections(不包括系统)和drop 或truncate 的列表。后者将删除所有文档并保留索引。或者,您可以使用AQL REMOVE 声明。
【讨论】:
创建数据库确实可能需要一段时间(几秒钟)。如果在为每个测试设置和拆除环境的单元测试设置中这太昂贵了,那么有以下选项:
每个测试套件(包含多个测试)仅创建和删除一次专用测试数据库,并为每个测试创建/删除所需的集合。事实证明,在许多情况下,这已经足够快了,但这取决于每个测试套件中包含多少测试。
不要创建和删除专用的测试数据库,而只让每个测试创建和删除所需的集合。这是最快的选择,如果您在新的数据库中开始每个测试运行,应该就足够了。但是,它需要测试以正确清理所有内容。这通常没有问题,因为无论如何测试通常都会使用专用集合。图形数据有一个例外:创建命名图形会将图形描述存储在 _graphs 集合中,并且必须再次从那里删除图形。
【讨论】:
执行以下 AQL 查询会删除集合 yourcollectionname 中的所有文档:
FOR u IN yourcollectionname
REMOVE u IN yourcollectionname
【讨论】: