동일한 데이터베이스 내에서 컬렉션을 복사하는 가장 빠른 방법은 무엇입니까?
동일한 데이터베이스 내에서 컬렉션을 복사하고 다른 이름을 지정 하고 싶습니다 . 기본적으로 스냅 샷을 찍습니다.
이를 수행하는 가장 좋은 방법은 무엇입니까? 명령이 있습니까? 아니면 각 레코드를 차례로 복사해야합니까?
cloneCollection
명령 은 알고 있지만 다른 서버로만 복사하는 것 같습니다.
나는 또한 알고 있어요 mongoimport
그리고 mongoexport
,하지만 난 원합니다 PHP I를 통해이 일을 해요로 쉘에 호출을 할 수 없습니다.
몇 가지 옵션이 있지만 가장 빠른 방법은 다음과 같습니다.
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
여기서 mongo 문서에 표시된 것처럼 script.js에는 다음과 같은 내용이 포함됩니다.
db.myoriginal.find().forEach( function(x){db.mycopy.insert(x)} );
컬렉션을 복사하는 가장 느린 방법은 정보를 이동하기 때문에 네이티브 PHP 드라이버를 사용하는 것입니다. 그러나 db execute 함수를 사용하여 CLI 호출을 절대적으로 피하려면 위의 mongo 쿼리를 발행 할 수 있습니다.
db.myoriginal.aggregate([ { $match: {} }, { $out: "mycopy" } ])
forEach 루프에서 많은 삽입을 수행하는 것보다 훨씬 빠릅니다.
참고 : 답변 업데이트를 읽으십시오. 중요합니다!
가장 간단하고 효율적인 방법은 copyTo () 를 사용하는 것이므로 다음을 사용할 수 있습니다.
db.source.copyTo("target");
& "target"
존재하지 않으면 생성됩니다.
-업데이트-
CopyTo Documentation 에 따르면 copyTo()
내부적으로 eval을 사용 하기 때문에 복사 작업은 mongod 인스턴스의 다른 모든 작업을 차단합니다. 따라서 프로덕션 환경에서 사용해서는 안됩니다 .
-업데이트-
때문에 CopyTo()
사용 eval()
내부적 &는 eval()
버전 3.0부터 사용되지 않습니다, 그래서 CopyTo()
또한 버전 3.0 이후 사용되지 않습니다 .
AD7six 첫 번째 솔루션 외에도 mongoexport / import를 사용하는 경우 여기에 설명 된대로 컬렉션 데이터 유형과 mongo 구성에 대해 확인하십시오. http://docs.mongodb.org/manual/reference/mongodb-extended-json/
이것은 파이썬 (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])
가장 빠른 방법은 db.collection.copyTo () 입니다.
버전 3.0부터 더 이상 사용되지 않습니다.
mongo 셸에서 copyDatabase 함수를 사용할 수 있습니다.
http://docs.mongodb.org/manual/tutorial/copy-databases-between-instances/
'Programing' 카테고리의 다른 글
서비스 워커 JavaScript 업데이트 빈도 (24 시간마다?) (0) | 2020.11.30 |
---|---|
디버그 모드에서 콘솔 응용 프로그램을 실행 한 후 Visual Studio를 일시 중지하려면 어떻게해야합니까? (0) | 2020.11.29 |
data.sql MySQL Docker 컨테이너 가져 오기 (0) | 2020.11.29 |
텍스트 길이에 따른 장고 필터 (0) | 2020.11.29 |
imageView 위와 아래의 추가 공간을 어떻게 제거합니까? (0) | 2020.11.29 |