복붙노트

[MONGODB] 동일한 데이터베이스 내에서 컬렉션을 복사하는 가장 빠른 방법은 무엇입니까?

MONGODB

동일한 데이터베이스 내에서 컬렉션을 복사하는 가장 빠른 방법은 무엇입니까?

나는 동일한 데이터베이스 내에서 컬렉션을 복사 할과 그것을 제공 다른 이름 - 기본적으로 스냅 샷을.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 명령이 있는가, 아니면 내가해야합니까 차례로 각 레코드를 복사?

나는 cloneCollection 명령 알고 있어요,하지만이 될 것 같다 다른 서버에만 복사.

또한 mongoimport 및 mongoexport 알고 있어요,하지만 난 원합니다 PHP I를 통해이 일을 해요로 쉘에 호출을 할 수 없습니다.

해결법

  1. ==============================

    1.당신은 몇 가지 옵션이 있지만, 가장 빠른입니다 :

    당신은 몇 가지 옵션이 있지만, 가장 빠른입니다 :

    mongodump -d db -c sourcecollection 
    mongorestore -d db -c targetcollection --dir=dump/<db>/<sourcecollection.bson>
    
    mongoexport -d db -c sourcecollection | mongoimport -d db -c targetcollection --drop
    

    또는 PHP에서 :

    `mongoexport -d db -c sourcecollection | mongoimport -d db -c targetcollection --drop`;
    

    당신이 가진 것을 후

    mongo db < script.js
    

    몽고 워드 프로세서와 같이 경우, script.js 같은 것을 포함

    db.myoriginal.find().forEach( function(x){db.mycopy.insert(x)} );
    

    때문에 단순히 주변 정보를 이동하는 - 컬렉션을 복사하는 방법 (크기 이상의 주문으로) 가장 느린 네이티브 PHP 드라이버를 사용하는 것입니다. 당신이 절대적으로 기능을 실행 DB을 사용하여 CLI 호출을 피하려고한다면 당신은 위의 몽고 쿼리를 실행할 수 있습니다.

  2. ==============================

    2.

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

    그것은 훨씬 빨리 foreach 루프에서 많은 삽입하는 것보다입니다.

  3. ==============================

    3.주 : 대답 업데이트를 읽고, 그들이 중요하다!

    주 : 대답 업데이트를 읽고, 그들이 중요하다!

    가장 간단하고 효과적인 방법은 당신이 사용할 수 있도록 사항 copyTo ()를 사용하는 것입니다 :

    db.source.copyTo("target"); 
    

    "대상"존재하지 않는 경우 및, 작성됩니다

    - 업데이트 -

    사항 copyTo ()를 사용하여 내부적으로 평가 후면 때문에하는 CopyTo 문서에있어서, 상기 복사 동작은 mongod 인스턴스에 다른 모든 동작을 차단한다. 그래서는 프로덕션 환경에 사용해서는 안됩니다.

    - 업데이트 -

    사용하는 CopyTo ()가 () 버전 3.0 이후 사용되지 않으며, 평가 () 내부 및 평가를 사용하기 때문에 사용하는 CopyTo ()는 또한 버전 3.0 이후 사용되지 않습니다 그래서.

  4. ==============================

    4.당신이 mongoexport를 사용하는 경우 AD7six 1 솔루션뿐만 아니라, / 가져 오기, 컬렉션 데이터 유형과 몽고 구성에 대한 확인 등 여기에서 설명 : http://docs.mongodb.org/manual/reference/mongodb-extended-json/

    당신이 mongoexport를 사용하는 경우 AD7six 1 솔루션뿐만 아니라, / 가져 오기, 컬렉션 데이터 유형과 몽고 구성에 대한 확인 등 여기에서 설명 : http://docs.mongodb.org/manual/reference/mongodb-extended-json/

  5. ==============================

    5.이것은 파이썬 내 구현 (pymongo를)입니다 :

    이것은 파이썬 내 구현 (pymongo를)입니다 :

    def copy_collection(client, from_db, from_coll, to_db=None, to_coll=None):
        to_db = from_db if to_db is None else to_db
        to_coll = from_coll if to_coll is None else to_coll
        assert (to_db != from_db or to_coll != from_coll), "Copy Error: Source and destination can't be same!"
        documents = client[from_db][from_coll].find()
        client[to_db][to_coll].insert_many([d for d in documents])
    
  6. ==============================

    6.가장 빠른 방법은 db.collection.copyTo ()이다.

    가장 빠른 방법은 db.collection.copyTo ()이다.

    이 버전 3.0 이후 사용되지 않습니다.

  7. ==============================

    7.당신은 몽고 쉘에서 copyDatabase 기능을 사용할 수 있습니다 :

    당신은 몽고 쉘에서 copyDatabase 기능을 사용할 수 있습니다 :

    http://docs.mongodb.org/manual/tutorial/copy-databases-between-instances/

  8. from https://stackoverflow.com/questions/10624964/whats-the-fastest-way-to-copy-a-collection-within-the-same-database by cc-by-sa and MIT license