Mongodb

無法導入具有重複欄位的 mongodb 數據庫

  • September 2, 2020

我正在嘗試導入 mongodb 數據庫,並且一直在使用 mongorestore 命令,導入開始時沒有問題,直到出現錯誤:失敗:dbprod.mys_account:創建集合時出錯 dbprod.mys_account:錯誤執行創建命令:BSON 欄位“OperationSessionInfo.create”是重複欄位

我已經嘗試過選項 –drop 但沒有成功,我從未使用過 mongodb …我必須澄清我將它保存在 mongodb 2.4 和 mongodump 中,我嘗試導入 mongodb 3.6

我已使用以下 3 步方法成功地將數據庫從 2.4 升級到 4.0:

  1. 在 2.4 數據庫上使用 2.4 mongobackup
  2. 從輸出的轉儲目錄中刪除所有 .json 文件
  3. 在剩餘的 .bson 文件上使用 4.0 mongorestore

正如您所說,您正在嘗試導入 MongoDB 數據庫,並且您正在使用 MongoDB 命令,例如 mongorestore。而且正如您所說,您已經對 MongoDB 數據庫進行了 mongodump 備份,MongoDB 版本是 2.4,並且您將在 MongoDB 中導入該 mongodump 備份,版本是 3.6。

正如我想在這裡按照 MongoDB BOL 文件在這裡所說的那樣從 3.2 開始,MongoDB 使用 WiredTiger 作為預設儲存引擎。以前的版本使用 MMAPv1 作為預設儲存引擎。隨著 MongoDB 3.2 的兼容性變化herehere

我不確定您使用什麼命令來導入 mongodump 數據。由於 mongoimport 和 mongorestore 兩個命令在 MongoDB 中具有不同的行為。

mongoimport工具從mongoexport創建的擴展 JSON、 CSV 或 TSV 導出中導入內容,或者可能是另一個第三方導出工具。

注意:mongoimport 僅支持 UTF-8 編碼的數據文件。使用其他編碼會產生錯誤。

例如 mongoimport 語法應該如下所述

>mongoimport -d test -c zips C:\MongoDBDBA\zips.json

因為這裡的 test 是數據庫名稱,而 zips 是集合名稱,而 zips.json 是 (.json) 文件,它將導入 MongoDB 數據庫。有關 mongoimport 的更多詳細資訊,您可以在此處找到 Ken W. Alger 的部落格。

由於mongorestore程序將數據從由 mongodump 創建的二進制數據庫轉儲或標準輸入(從 3.0.0 版開始)載入到 mongod 或 mongos 實例中。

如果您正在執行 mongorestore,請在此處停止,並且必須查看版本兼容性。

版本兼容性

2.2 或更高版本的mongodump使用的數據格式與早期版本的mongod不兼容。不要使用最新版本的 mongodump 來備份舊的數據儲存。

排除 system.profile 集合

mongorestore 不恢復 system.profile 集合數據。

所需訪問權限

要將數據恢復到啟用了訪問控制的 MongoDB 部署,如果備份數據不包括system.profile集合數據,恢復角色將提供恢復任何數據庫的訪問權限。

mongorestore 語法應如下所述

>mongorestore --collection people --db accounts dump/accounts/people.bson

這裡的accounts 是數據庫名稱,people 是集合名稱。people.bson 是 mongodump (.bson) 文件,它將在 MongoDB 數據庫中恢復。

為了進一步參考這里這裡

引用自:https://dba.stackexchange.com/questions/201827