2013-07-27 20 views
1

我使用MongoDB作爲我的數據庫,並且作爲首次後端開發人員,我可以輕鬆刪除整個數據庫/集合,這真讓我感到困擾。MongoDB - 防止.remove()整個數據庫?

只需鍵入db.collection.remove()即可刪除該集合中的所有記錄!

我知道,有效的備份策略應使這不是大問題,但我偶爾做一些收藏運行.remove(),並且我討厭意外和(a)有錯誤的集合名稱鍵入(b)丟失備份和還原之間收集的任何數據,尤其是當我的應用程序收集大量用戶數據時。

是否有任何「保障」我可以設置我的數據庫使用,即使它只是一個警告/確認說

"Yo, are you sure you want to remove everything from <collectionname>?選擇:Yes/No"

回答

3

用戶角色不能解決您的問題。如果您的帳戶有權刪除一個用戶,則可能會意外刪除所有用戶。如果您的帳戶有權更新某位用戶的屬性,則可能會意外更新所有用戶。

但是,有一個簡單的修復方法。

第0步:備份您的數據庫。並定期測試您的備份。並確保在備份沒有運行或發生錯誤時收到警報。副本集不是備份。我知道這是顯而易見的,但evidentally it's not obvious to everybody.

第1步:寫你的數據庫web admin GUI界面。這隻需要一兩天 - 而且它應該很簡單,祕書或實習生可以毫不畏懼地使用它來記錄您的數據。 (如果您認爲這將需要很長時間,請找到一個更具花裏胡哨的框架,您的管理控制檯甚至不需要用與您的應用程序相同的語言編寫)。遷移(數據庫的維護轉換)應始終從腳本中運行,並檢查到源代碼管理,並在非生產環境中進行預先測試。該腳本可以像mongo -e "foo.update(blah)"一樣簡單,但您應該將其作爲腳本運行以避免剪切 - 粘貼錯誤。理想情況下,您甚至可以爲所有遷移提供清單。 (檢查你有最近的備份,事先檢查數據庫日誌和系統負載,寫一個前後查詢,告訴你遷移是否成功...)

第3步:你現在不再需要使用生產Mongo控制檯。所以不要。這是一個有用的開發工具,但只有在本地開發數據庫中才需要。

上述提到的角色可能對只讀查詢很有用。但是,您已經可以對非主副本集成員執行此操作。

TL;博士:你可以走很遠使用cowboy admin techniques,但最終你要弄清楚,這是更好的(而不是更多的工作)自動一切。

1

沒有什麼,你可以在當前做版本提供此功能。

在將來的版本中,當用戶定義的角色可用時,您可以定義允許insert()和update()而不是remove()或drop()等的角色,因此可以讓自己登錄爲不同的更高版本-role用戶,但這在當前(2.4)版本中不可用。

+0

哦,真棒,他們打算建立功能!有沒有時間表,或者這只是一個'也許'?我確信我不是唯一一個害怕這個功能的人! – Jascination

+0

它將在下一個主要版本中發佈https://jira.mongodb.org/browse/SERVER-8580 –