在 MongoDB 中複製同一資料庫中的集合
- 在 MongoDB 中工作時複製同一資料庫中的集合
-
使用
mongodump
和mongorestore
在 MongoDB 的同一資料庫中複製集合 -
使用
aggregate()
方法在 MongoDB 的同一資料庫中複製集合 -
使用
forEach()
迴圈在 MongoDB 的同一資料庫中複製集合
在同一個資料庫中複製一個集合是一項了不起的任務。它可以節省時間和精力。本教程演示瞭如何使用 mongodump
、mongorestore
、aggregate()
和 forEach()
使用 MongoDB 在同一資料庫中複製集合。
在 MongoDB 中工作時複製同一資料庫中的集合
在舊版本的 MongoDB 中,例如小於 3.0,我們可以使用 copyTo()
方法作為 db.collection_name.copyTo()
來複制集合,但現在已棄用。
eval
也隨著 MongoDB 版本 4.2 的開始而被棄用。請注意,db.collection_name.copyTo()
包裝了 eval
,這意味著如果我們有 MongoDB 4.2 或更高版本,我們無法使用其中任何一個來複制集合。
在新版本的 MongoDB 中還有其他一些方法可以用來在同一個資料庫中複製集合。這裡給出了其中的一些。
- 使用
mongodump
和mongorestore
命令 - 使用
aggregate()
方法 - 使用
forEach()
迴圈
讓我們開始一一學習。
使用 mongodump
和 mongorestore
在 MongoDB 的同一資料庫中複製集合
這是使用 MongoDB 資料庫工具在同一資料庫中克隆/複製集合的最快方法;特別是,我們可以使用 mongodump
和 mongorestore
。資料庫工具是一套用於在 MongoDB 中工作的命令列實用程式。
我們可以在 Windows 命令提示符下使用以下命令來檢查 mongodump
和 mongorestore
的版本。如果它成功返回相應的版本,則安裝資料庫工具。
否則,請按照此安裝資料庫工具。
示例程式碼:
C:/Users/Dell> mongodump --version
示例程式碼:
C:/Users/Dell> mongorestore --version
請記住,我們必須從系統的命令列執行 mongodump
和 mongorestore
命令,例如,如果我們使用的是 Ubuntu,則從 Windows 作業系統或終端執行命令提示符。永遠不要從 mongo shell 執行這個命令。
一旦我們有了用於 MongoDB 的資料庫工具,執行以下命令將 teachers
集合轉儲到同一資料庫 test
中。
示例程式碼:
C:/Users/Dell> mongodump -d test -c teachers
輸出:
2022-05-27T13:05:14.497+0500 writing test.teachers to dump\test\teachers.bson
2022-05-27T13:05:14.503+0500 done dumping test.teachers (3 documents)
上面的輸出表明轉儲檔案被寫入 dump\test\teachers.bson
。所以,我們需要使用下面給出的命令來恢復它。
示例程式碼:
C:/Users/Dell>mongorestore -d test -c teachers1 --dir=dump/<db>/<sourcecollection.bson>
輸出:
2022-05-27T13:05:28.085+0500 checking for collection data in dump\test\teachers.bson
2022-05-27T13:05:28.088+0500 reading metadata for test.teachers1 from dump\test\teachers.metadata.json
2022-05-27T13:05:28.252+0500 restoring test.teachers1 from dump\test\teachers.bson
2022-05-27T13:05:28.312+0500 finished restoring test.teachers1 (3 documents, 0 failures)
2022-05-27T13:05:28.312+0500 no indexes to restore for collection test.teachers1
2022-05-27T13:05:28.313+0500 3 document(s) restored successfully. 0 document(s) failed to restore.
輸出將如上所示,這意味著集合已成功複製。如果當前資料庫中不存在名為 teachers1
的目標集合,則將建立它。
接下來,開啟 mongo shell 並執行以下查詢以檢視複製的集合是否存在。
示例程式碼:
> show collections
輸出:
teachers
teachers1
或者,我們也可以使用 mongoexport
從資料庫 (test
) 中匯出集合 (teachers
),然後使用 mongoimport
將其匯入同一資料庫中的 teachers2
集合中。
示例程式碼:
C:/Users/Dell> mongoexport -d test -c teachers | mongoimport -d test -c teachers2 --drop
使用 aggregate()
方法在 MongoDB 的同一資料庫中複製集合
示例程式碼:
> db.teachers.aggregate([{$out: "teachers3"}])
此命令使用 mongo shell 執行。之後,我們使用 show collections
命令檢視 teachers3
是否存在。
示例程式碼:
> show collections
輸出:
teachers
teachers1
teachers2
teachers3
我們正在使用聚合管道從 teachers
集合返回資料並將它們寫入指定的集合,此處為 teachers3
。如果我們有 MongoDB 4.4 或更高版本,我們可以使用這種方法。
使用 forEach()
迴圈在 MongoDB 的同一資料庫中複製集合
示例程式碼:
> db.teachers.find().forEach((doc) => {
db.teachers4.insert(doc)
})
使用以下查詢來確認 teachers4
是否位於同一資料庫中。
示例程式碼:
> show collections
輸出:
teachers
teachers1
teachers2
teachers3
teachers4
由於使用迴圈,與上述所有方法相比,此方法是最慢的。它遍歷源集合的所有文件,並將它們一一插入到目標集合中。