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

MongoDB에서 bulkWrite()로 여러 문서를 한 번에 추가하는 방법

MongoDB에서 여러 개의 쓰기(write) 작업을 한 번에 처리하려면 bulkWrite() 메서드를 사용하는 것이 가장 효율적입니다. 이 메서드는 삽입, 수정, 삭제 등 다양한 작업을 하나의 요청으로 묶어 실행할 수 있어 성능 면에서 큰 이점을 제공합니다.

1. 배열 데이터 준비하기

먼저 컬렉션에 추가할 값들을 담은 배열 리스트를 생성합니다. 아래 예제에서는 두 개의 사용자 정보(John, Bob)를 배열로 정의했습니다.

> const arrayList = [
...    {"Value1":100, "Value2":200, "Name": "John"},
...    {"Value1":100, "Value2":200, "Name": "Bob"}
... ];

2. bulkWrite()용 연산 배열 생성

다음으로 각 배열 항목을 updateOne 연산으로 변환하여 작업 목록(op1)을 만듭니다. 여기서 중요한 점은 upsert: true 옵션입니다. 이 옵션을 사용하면 필터 조건(Name)에 일치하는 문서가 없을 경우 새 문서를 자동으로 생성(삽입)합니다.

> let op1 = [];
> arrayList.forEach(({ Value1, Value2, Name }) => {
...    op1.push({
...       "updateOne": {
...          "filter": { Name},
...          "update": { "$set": { Value1, Value2, Name } },
...          "upsert": true
...       }
...    })
... });

3. bulkWrite() 실행하기

준비된 작업 배열을 demo397 컬렉션의 bulkWrite()에 전달하여 일괄 실행합니다.

> db.demo397.bulkWrite(op1);

실행 결과는 다음과 같습니다. matchedCount가 0이고 upsertedCount가 2인 것을 확인할 수 있는데, 이는 기존에 일치하는 문서가 없어 두 개의 문서가 모두 새로 삽입되었음을 의미합니다.

{
   "acknowledged" : true,
   "deletedCount" : 0,
   "insertedCount" : 0,
   "matchedCount" : 0,
   "upsertedCount" : 2,
   "insertedIds" : {
   },
   "upsertedIds" : {
      "0" : ObjectId("5e5e8c07f995e1718151981c"),
      "1" : ObjectId("5e5e8c07f995e1718151981d")
   }
}

4. 결과 확인하기

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

> db.demo397.find();

위 명령을 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

{ "_id" : ObjectId("5e5e8c07f995e1718151981c"), "Name" : "John", "Value1" : 100, "Value2" : 200 }
{ "_id" : ObjectId("5e5e8c07f995e1718151981d"), "Name" : "Bob", "Value1" : 100, "Value2" : 200 }

정리

bulkWrite()는 여러 쓰기 작업을 단일 요청으로 처리하므로, 반복문에서 insertOne()이나 updateOne()을 여러 번 호출하는 것보다 네트워크 왕복 횟수가 크게 줄어듭니다. 특히 대량의 데이터를 처리할 때 upsert 옵션과 함께 사용하면 '있으면 수정, 없으면 삽입' 로직을 손쉽게 구현할 수 있습니다.