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 OS 또는 터미널의 명령 프롬프트). mongo 셸에서 이 명령을 실행하지 마십시오.
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 셸을 열고 다음 쿼리를 실행하여 복사된 컬렉션이 있는지 확인합니다.
예제 코드:
> 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 셸을 사용하여 실행됩니다. 그런 다음 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
이 방법은 루프를 사용하기 때문에 위의 모든 방법에 비해 가장 느립니다. 소스 컬렉션의 모든 문서를 반복하고 대상 컬렉션에 하나씩 삽입합니다.