【发布时间】:2021-11-12 17:04:33
【问题描述】:
我想做什么?
我编写了一个名为deleteDatabases.js 的脚本,它应该在mongosh 中删除所有数据库(除了“admin”、“config”或“local”)。我无权访问mongo,只有mongosh。
目前尝试这样做的代码是什么?
deleteDatabases.js
Mongo().getDBNames().forEach(function(x) {
if (['admin', 'config', 'local'].indexOf(x) < 0) {
Mongo().getDB(x).dropDatabase();
}
})
内部mongosh:
$ mongosh
...
Using MongoDB: 4.4.1
Using Mongosh Beta: 0.4.0
> show dbs
admin 184 kB
config 36.9 kB
database1 283 kB
database2 420 kB
database3 1337 kB
local 90.1 kB
> .load /deleteDatabases.js
... (Code from deleteDatabases.js) ...
TypeError: (intermediate value).getDBNames is not a function
在我成功删除这些数据库之前是:
> db = db.getSiblingDB("database1")
database1
> db.dropDatabase()
{ ok: 1, dropped: 'database1' }
# Repeat for each database I want deleted.
我期望结果是什么?
我希望删除“admin”、“config”或“local”之外的所有数据库。
实际结果如何?
如上,有一个TypeError。
我认为问题可能是什么?
- 我使用的
mongosh版本已过期,并且尚未实现或根本没有实现这些方法。 - 我的
.js文件实现不正确。
想知道是否有其他选择,除非我必须使用其他东西,否则我仍然使用 mongosh。
编辑:
deleteDatabases.js
db.adminCommand( { listDatabases: 1 } ).databases.
map(database => database.name).
filter(name => ["admin", "config", "local"].indexOf(name) == -1).
forEach(function(name){db.getSiblingDB(name).dropDatabase()})
这是我正在使用的修复程序,但希望 .map() 能够正常工作,这样我可以在运行 Joe 所说的命令后看到输出。
【问题讨论】:
标签: javascript database mongodb mongo-shell