我想做什么?
我寫了一個名為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
...
使用MongoDB:4.4.1
使用Mongosh Beta: 0.4.0
> 顯示dbs
admin 184 kB
config 36.9 kB
資料庫1 283 kB
資料庫2 420 kB
資料庫3 1337 kB
local 90.1 kB
> .load /deleteDatabases.js
... (代碼來自deleteDatabases.js) ...
TypeError: (中間值).getDBNames不是一個函式。
之前我為成功洗掉這些資料庫所做的作業是:
> db = db.getSiblingDB("database1")
資料庫1
> db.dropDatabase()
{ ok: 1, dropped: 'database1' }
# 對每個我想洗掉的資料庫重復一遍。
我期望的結果是什么?
我希望除了 "admin"、"config "或 "local "之外的所有資料庫都被洗掉。
實際的結果是什么?
如上所述,有一個TypeError.
我認為問題可能是什么?
- 我使用的
mongosh的版本已經過時了,還沒有實作或根本沒有這些方法。 - 我的
.js檔案的實作不正確。
我想知道是否有一個替代方案,我仍然使用mongosh,除非我不得不使用其他東西。
編輯:
deleteDatabases.js
db.adminCommand( { listDatabases: 1 }。).databases.
map(span class="hljs-params">database => database.name)。
filter(span class="hljs-params">name => ["admin"/span>, "config"/span>, "local"/span>]。 indexOf(name) == -1)。)
forEach(function(name){db. getSiblingDB(name).dropDatabase()})
這是我正在使用的修復方法,但我希望.map()能起作用,這樣我就能看到Joe所說的運行命令后的輸出。
uj5u.com熱心網友回復:
使用listDatabases管理命令,map只獲得資料庫名稱,filter消除你不想要的:
db.adminCommand("listDatabases"/span>).databases。
map(span class="hljs-params">d => d.name) 。
filter(n => ["admin"/span>, "config"/span>, "local"/span>]。 indexOf(n) == -1 ) 。
map(n => db。 getSiblingDB(n).dropDatabase())
注意,如果你使用map而不是forEach,你將得到哪些資料庫被成功丟棄的確認,就像
[
{ ok: 1, dropped: 'test' },
{ ok: 1, dropped: 'test1' },
{ ok: 1, dropped: 'test2' }
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/324214.html
標籤:
上一篇:SpringSecurity和Angular官方教程angular部分無法編譯
下一篇:回傳新創建的多個記錄的模型
