在 "mongosh" 中,如何删除所有数据库而不删除典型的 "admin"、"config" 或 "local" 数据库?
In "mongosh", how do I delete all databases without deleting the typical "admin", "config", or "local" databases?
我想做什么?
我编写了一个名为 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 所说的命令后看到输出。
使用 listDatabases 管理命令,map
只获取数据库名称,filter
删除不需要的:
db.adminCommand("listDatabases").databases.
map(d => d.name).
filter(n => ["admin", "config", "local"].indexOf(n) == -1 ).
map(n => db.getSiblingDB(n).dropDatabase())
请注意,如果您使用 map
而不是 forEach
,您将收到关于哪些数据库已成功删除的确认信息,例如
[
{ ok: 1, dropped: 'test' },
{ ok: 1, dropped: 'test1' },
{ ok: 1, dropped: 'test2' }
]
我想做什么?
我编写了一个名为 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 所说的命令后看到输出。
使用 listDatabases 管理命令,map
只获取数据库名称,filter
删除不需要的:
db.adminCommand("listDatabases").databases.
map(d => d.name).
filter(n => ["admin", "config", "local"].indexOf(n) == -1 ).
map(n => db.getSiblingDB(n).dropDatabase())
请注意,如果您使用 map
而不是 forEach
,您将收到关于哪些数据库已成功删除的确认信息,例如
[
{ ok: 1, dropped: 'test' },
{ ok: 1, dropped: 'test1' },
{ ok: 1, dropped: 'test2' }
]