在 MongoDB 中複製同一資料庫中的集合

Mehvish Ashiq 2023年1月30日
  1. 在 MongoDB 中工作時複製同一資料庫中的集合
  2. 使用 mongodumpmongorestore 在 MongoDB 的同一資料庫中複製集合
  3. 使用 aggregate() 方法在 MongoDB 的同一資料庫中複製集合
  4. 使用 forEach() 迴圈在 MongoDB 的同一資料庫中複製集合
在 MongoDB 中複製同一資料庫中的集合

在同一個資料庫中複製一個集合是一項了不起的任務。它可以節省時間和精力。本教程演示瞭如何使用 mongodumpmongorestoreaggregate()forEach() 使用 MongoDB 在同一資料庫中複製集合。

在 MongoDB 中工作時複製同一資料庫中的集合

在舊版本的 MongoDB 中,例如小於 3.0,我們可以使用 copyTo() 方法作為 db.collection_name.copyTo() 來複制集合,但現在已棄用。

eval 也隨著 MongoDB 版本 4.2 的開始而被棄用。請注意,db.collection_name.copyTo() 包裝了 eval,這意味著如果我們有 MongoDB 4.2 或更高版本,我們無法使用其中任何一個來複制集合。

在新版本的 MongoDB 中還有其他一些方法可以用來在同一個資料庫中複製集合。這裡給出了其中的一些。

  1. 使用 mongodumpmongorestore 命令
  2. 使用 aggregate() 方法
  3. 使用 forEach() 迴圈

讓我們開始一一學習。

使用 mongodumpmongorestore 在 MongoDB 的同一資料庫中複製集合

這是使用 MongoDB 資料庫工具在同一資料庫中克隆/複製集合的最快方法;特別是,我們可以使用 mongodumpmongorestore。資料庫工具是一套用於在 MongoDB 中工作的命令列實用程式。

我們可以在 Windows 命令提示符下使用以下命令來檢查 mongodumpmongorestore 的版本。如果它成功返回相應的版本,則安裝資料庫工具。

否則,請按照安裝資料庫工具。

示例程式碼:

C:/Users/Dell> mongodump --version

示例程式碼:

C:/Users/Dell> mongorestore --version

請記住,我們必須從系統的命令列執行 mongodumpmongorestore 命令,例如,如果我們使用的是 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

由於使用迴圈,與上述所有方法相比,此方法是最慢的。它遍歷源集合的所有文件,並將它們一一插入到目標集合中。

作者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

相關文章 - MongoDB Collection