Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 쿼리 결과를 임시 컬렉션에 저장하는 방법

MongoDB 쿼리 결과를 임시 데이터베이스에 저장하기

MongoDB에서 쿼리 실행 결과를 별도의 임시 컬렉션에 저장해야 하는 경우가 종종 있습니다. 이럴 때 forEach() 메서드를 활용하면 단일 쿼리만으로 조회 결과를 다른 컬렉션에 손쉽게 복사할 수 있습니다.

먼저 예제에 사용할 컬렉션을 생성하고 문서를 삽입해 보겠습니다.

> db.demo43.insertOne({"StudentName":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e25d4b3cfb11e5c34d898e5")
}
> db.demo43.insertOne({"StudentName":"Bob"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e25d4b8cfb11e5c34d898e6")
}
> db.demo43.insertOne({"StudentName":"David"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e25d4bbcfb11e5c34d898e7")
}

find()로 문서 확인하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.

> db.demo43.find();

위 쿼리는 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5e25d4b3cfb11e5c34d898e5"), "StudentName" : "Chris" }
{ "_id" : ObjectId("5e25d4b8cfb11e5c34d898e6"), "StudentName" : "Bob" }
{ "_id" : ObjectId("5e25d4bbcfb11e5c34d898e7"), "StudentName" : "David" }

forEach()로 쿼리 결과를 임시 컬렉션에 저장하기

이제 핵심 부분입니다. find()로 조회한 각 문서를 forEach() 함수로 순회하면서 새로운 컬렉션(demo44)에 하나씩 삽입하면 됩니다.

> db.demo43.find().forEach(function(myDocument) { db.demo44.insert(myDocument); } )

이 쿼리는 demo43 컬렉션의 모든 문서를 순차적으로 읽어 demo44라는 임시 컬렉션에 그대로 저장합니다. 참고로 대상 컬렉션이 존재하지 않으면 MongoDB가 자동으로 생성해 주므로 별도의 사전 작업이 필요하지 않습니다.

저장된 결과 확인

새 컬렉션에 데이터가 제대로 저장되었는지 find() 메서드로 확인해 보겠습니다.

> db.demo44.find();

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e25d4b3cfb11e5c34d898e5"), "StudentName" : "Chris" }
{ "_id" : ObjectId("5e25d4b8cfb11e5c34d898e6"), "StudentName" : "Bob" }
{ "_id" : ObjectId("5e25d4bbcfb11e5c34d898e7"), "StudentName" : "David" }

정리

이처럼 forEach()와 함께 콜백 함수에서 insert를 호출하면 조회 결과 전체를 다른 컬렉션으로 간단히 복사할 수 있습니다. 다만 대량의 데이터를 다룰 때는 성능을 위해 $out 또는 $merge 집계 연산자를 사용하는 것이 더 효율적이라는 점도 함께 기억해 두면 좋습니다.