2016-01-22 235 views
2

部署脚本创建和配置数据库,集合等。该脚本包含在开始之前删除数据库的代码,以便测试它们可以正常进行。删除数据库后重新添加它:删除和重新创建ArangoDB数据库保留集合

var graphmodule = require("org/arangodb/general-graph"); 
var graphList = graphmodule._list(); 
var dbList = db._listDatabases(); 

for (var j = 0; j < dbList.length; j++) { 
    if (dbList[j] == 'myapp') 
     db._dropDatabase('myapp'); 
} 

db._createDatabase('myapp'); 
db._useDatabase('myapp'); 

db._create('appcoll'); // Collection already exists error occurs here 

先前已加入到MYDB留在MYDB的集合,但它们是空的。这对于我的特殊用例来说并不是一个问题,因为集合是空的,而且我已经计划重新构建它们,但我宁愿有一个干净的平台来进行测试,这种行为看起来很奇怪。

我试过关闭shell并重新启动drop和add之间的数据库,但是没有解决问题。

有没有办法干净地删除和重新添加数据库?

+0

答复回答你的问题?如果是的话,你能标记接受的答案吗?如果没有,缺少什么? – dothebart

+0

它正在使用正确的数据库。该脚本还检查并删除图表。这似乎是多余的,因为整个数据库都被删除了,但是当我将该块移到db._create('appcoll')行之前时,问题就解决了。 appcoll集合在图中使用。数据库被删除后是否存在对图集合的残留引用? – gph

+0

如果您创建一个[命名图](https://docs.arangodb.com/Glossary/index.html#named-graphs),其管理数据将保存在系统集合“_graphs”中。您应该[通过图表管理功能]删除图表(https://docs.arangodb.com/GeneralGraphs/Management.html#remove-a-graph)。与图形相关的另一件事是使用浏览器存储来记住图形设置的UI。 – dothebart

回答

0

ArangoDB存储关于managed graphs的其他信息;

因此与命名图工作时,你应该使用the graph management functions删除图表,使舒尔没有保留在系统中:

var graph_module = require("org/arangodb/general-graph"); 
graph_module._drop("social", true); 

在管理界面中存储您的视图首选项的当前实现图形浏览器的(就像应该成为图形标签的属性一样)在您的浏览器本地存储中,因此这些功能无法实现。

1

当调用db._dropDatabase()时应撤销集合。 但是,如果您直接运行db._dropDatabase('mydb');,然后再运行db._createDatabase('mydb');,然后通过db._collections()检索集合列表,这将显示当前数据库的集合(如果能够运行命令,可能是_system数据库)?

这意味着您可能一直在查看_system数据库中的集合,除非您通过db._useDatabase(name);更改数据库。这是否解释了它?

+0

我从脚本中添加了额外的代码,以显示我试图切换数据库的位置。尽管我确实看到了你的观点,但可能存在一个更微妙的问题。我会仔细观察一下,并尽快更新回来。 – gph

相关问题