prosource

한 컬렉션에서 다른 컬렉션으로 mongo 복사(같은 DB에 있음

probook 2023. 7. 7. 19:06
반응형

한 컬렉션에서 다른 컬렉션으로 mongo 복사(같은 DB에 있음

몽고드에게 전화가 왔습니다.test그리고 이 DB에는 두 개의 컬렉션이 있습니다.collection1그리고.collection1_backup내용을 대체하는 방법collection1로부터의 자료를 가지고.collection1_backup.

이 작업을 수행하는 가장 좋은 방법(수집의 이름을 고려할 때)은 다음과 같습니다._backup) mongorestore를 사용했을 수 있습니다. http://docs.mongodb.org/manual/reference/mongorestore/

그러나 이 경우에는 다릅니다.컬렉션이 분할되지 않은 경우 사용할 수 있습니다.renameCollection( http://docs.mongodb.org/manual/reference/command/renameCollection/ ) 또는 (JavaScript 코드에서) 보다 수동적인 방법을 사용할 수 있습니다.

db.collection1.drop(); // Drop entire other collection
db.collection1_backup.find().forEach(function(doc){
   db.collection1.insert(doc); // start to replace
});

이것들이 가장 일반적인 방법입니다.

이 작업은 간단한 명령을 사용하여 수행할 수 있습니다.

db.collection1_backup.aggregate([ { $match: {} }, { $out: "collection1" } ])

이 명령은 collection1의 모든 문서를 제거한 다음 collection1_backup의 복제본을 만듭니다.

일반 명령은 다음과 같습니다.

db.<SOURCE_COLLECTION>.aggregate([ { $match: {} }, { $out: "<TARGET_COLLECTION>" } ])

TARGET_COLLECTION이 존재하지 않는 경우 위의 명령을 사용하여 TARGET_COLLECTION을 생성합니다.

또한 유용: 컬렉션을 json 파일로 내보냅니다.

mongoexport --collection collection1_backup --out collection1.json

json 파일에서 컬렉션을 가져오다

mongoimport --db test --collection collection1 --file collection1.json

백업/파일에서 단일 컬렉션을 가져오려면 를 사용하여 *.bson 파일을 *.json 파일로 변환해야 합니다.

bsondump collection1_backup.bson > collection1_backup.json

그냥 이렇게 하세요.

//수집 삭제1

db.collection1.drop();

//collection1_backup에서 collection1로 데이터 복사

db.collection1.insert(db.collection1_backup.find({},{_id:0}).toArray());

Java 드라이버 사용

다음 중 하나를 시도해 보십시오.

public void copyTo(String db,String sourceCollection,String destinationCollection,int limit) throws        
UnknownHostException {

    MongoClient mongo = new MongoClient("localhost", 27017);
    DB database = mongo.getDB(db);
    DBCollection collection = database.getCollection(sourceCollection);
    DBCursor dbCursor = collection.find().limit(limit);
    List<DBObject> list =  dbCursor.toArray();
    DBCollection destination =  database.getCollection(destinationCollection);
    destination.insert(list, WriteConcern.NORMAL); //WRITE CONCERN is based on your requirment.

}

더 나은 방법은 사용하는 것입니다.

 db.collection1.drop(); // Drop entire other collection

 // creates an array which can be accessed from "data"
 db.collection1_backup.find().toArray(function(err, data) {

      // creates a collection and inserting the array at once
      db.collection1.insert(data);
 });

간단한 명령을 사용하여 MongoDB Collection 백업을 수행할 수 있습니다.MongoDB 4.0 이전 버전에서만 작동합니다.

db.sourceCollectionName.copyTo('targetCollectionName')

대상 컬렉션 이름은 단일(') 또는 이중(") 따옴표로 묶어야 합니다.

참고:

db.collection.copyTo() 메서드는 내부적으로 eval 명령을 사용합니다.따라서 db.collection.copyTo() 작업은 db.collection.copyTo()가 완료될 때까지 다른 모든 읽기 및 쓰기 작업을 차단하는 전역 잠금을 사용합니다.

수집 삭제1

그런 다음 이 쿼리를 사용합니다.

var cursor = db.collection1_backup.find();
var data = [];
while(cursor.hasNest()){
    data.push(cursor.next());
}

db.collection1.insertMany(data)

언급URL : https://stackoverflow.com/questions/13916004/mongo-copy-from-one-collection-to-another-on-the-same-db

반응형