programing

MongoDB에서 컬렉션 복제

testmans 2023. 5. 15. 21:22
반응형

MongoDB에서 컬렉션 복제

MongoDB 컬렉션을 복제하여 동일한 서버에 다른 이름으로 저장하려고 합니다.예를 들어 현재 demo1.categories, demo1.users 및 demo2.users 컬렉션이 있습니다.

저는 "demo1.categories"와 동일한 "demo2.categories"를 갖고 싶습니다. (그냥 이름만 다릅니다.)

그러나 MongoDB 문서는 다시 구조되었습니다.

컬렉션의 이름이 실제로 "demo1.categories"라고 가정합니다.

db.demo1.categories.find().forEach( function(x){db.demo2.categories.insert(x)} );

가장 간단하고 효율적인 방법은 copyTo()를 사용하는 것이므로 다음을 사용할 수 있습니다.

db.source.copyTo("target"); 

만일"target"존재하지 않습니다. 생성됩니다.

업데이트 --

CopyTo Documentation에 따르면 다음과 같은 이유가 있습니다.copyTo()내부적으로 eval을 사용하면 복사 작업이 mongod 인스턴스의 다른 모든 작업을 차단합니다.그래서 그것은 생산 환경에서 사용되어서는 안 됩니다.

업데이트 --

왜냐면CopyTo()내부적으로 사용 및eval()버전 3.0 이후에는 더 이상 사용되지 않습니다.CopyTo()버전 3.0 이후에는 더 이상 사용되지 않습니다.

컬렉션을 복제하는 가장 빠른 방법은 다음과 같습니다.

mongoexport -d db_name -c src_collection | mongoimport -d db_name -c dst_collection --drop

db_namesrc_collectiondst_collection으로 복제합니다.또는 bson 레벨에서 두 단계로 수행할 수 있습니다.

mongodump -d db_name -c src_collection
mongorestore --drop -d db_name -c dst_collection ./dump/db_name/src_collection.bson

가장 빠른 옵션은

db.myoriginal.aggregate([ { $out: "mycopy" } ])

이미 이에 대한 명령이 있습니다.

한 서버에서 다른 서버로 단일 컬렉션을 복사합니다.http://www.mongodb.org/display/DOCS/cloneCollection+Command

속도가 걱정된다면 다음을 사용하여 확인했습니다.aggregate와 함께$project그리고.$out100배 더 빨라지려면 제한이 있는지는 모르겠지만 복사할 필드 집합을 만들어야 합니다. 예:

// Set of fields in the categories collection
var setOfFields = {field1:1, field2:1.......}
db.demo1.categories.aggregate([{ "$project": setOfFields},{ $out: "demo2.categories"}]);

모든 문서에 대해 선택한 필드 집합을 복사(프로젝트)합니다.demo1.categories로.demo2.categories

사용 안 함db.cloneCollection()메서드, 현재 버전에서 감가상각되었습니다.4.2대신 사용해 보십시오.mongoexport.

감가상각추심법

mongo 콘솔에서도 다음 작업을 수행할 수 있습니다. 여기서 db_host는 복제할 컬렉션이 있는 db_host가 있는 시스템입니다.

db.cloneCollection(, ) 사용

언급URL : https://stackoverflow.com/questions/8933307/clone-a-collection-in-mongodb

반응형