Docs Menu
Docs Home
/ / /
Node.js 드라이버
/

대량 작업 수행

bulkWrite() 메서드는 단일 컬렉션에 대해 일괄 쓰기 작업을 수행합니다. 이 방법을 사용하면 애플리케이션에서 서버로의 네트워크 왕복 횟수가 줄어들어 처리량과 성능이 향상됩니다. 대량 쓰기는 메서드에 전달된 컬렉션을 모든 작업이 완료된 후에만 모든 작업에 대한 결과를 반환합니다.

bulkWrite()에서 다음 쓰기 작업 중 하나 이상을 지정할 수 있습니다.

  • insertOne

  • updateOne

  • updateMany

  • deleteOne

  • deleteMany

  • replaceOne

bulkWrite() 메서드는 다음 매개 변수를 허용합니다:

  • operations: 수행할 대량 쓰기 작업을 지정합니다. 각 작업을 배열의 객체로 bulkWrite()에 전달합니다. 각 쓰기 작업에 대한 구문을 보여 주는 예시는 bulkWrite API 문서를 참조하세요.

  • options: 쓰기 작업을 순차적으로 실행하는지 여부, 쓰기 고려 등 작업 실행에 영향을 미치는 선택적 설정입니다.

    기본적으로 MongoDB는 지정된 순서에 따라(순차적으로) 대량 쓰기 작업을 하나씩 실행합니다. 순서가 지정된 일괄 쓰기 중에 작업 처리 도중 오류가 발생하면 MongoDB는 목록의 나머지 작업을 처리하지 않고 반환합니다. 반면에 orderedfalse인 경우, MongoDB는 목록에 남아 있는 쓰기 작업을 계속 처리합니다. 순서가 지정되지 않은 작업은 MongoDB가 병렬로 실행할 수 있기 때문에 이론적으로는 더 빠르게 처리되지만, 쓰기가 순서에 의존하지 않는 경우에만 사용합니다.

고유 인덱스 제약 조건이 있는 인덱스를 생성하는 경우 다음 형식의 작업 중에 중복 키 쓰기 오류가 발생할 수 있습니다.

Error during bulkWrite, BulkWriteError: E11000 duplicate key error collection: ...

마찬가지로 스키마 유효성 검사를 사용하는 컬렉션에 대해 대량 쓰기를 수행하려고 하면 삽입 또는 수정된 문서의 서식과 관련된 경고 또는 오류가 발생할 수 있습니다.

다음 코드 샘플은 sample_mflix 데이터베이스의 theaters 컬렉션에 대해 대량 쓰기 작업을 수행합니다. bulkWrite()에 대한 예시 호출에는 insertOne, updateManydeleteOne 쓰기 작업의 예시가 포함되어 있습니다.

참고

이 예시를 사용하여 MongoDB 인스턴스에 연결하고 샘플 데이터가 포함된 데이터베이스와 상호 작용할 수 있습니다. MongoDB 인스턴스에 연결하고 샘플 데이터 세트를 로드하는 방법에 대해 자세히 알아보려면 사용 예제 가이드를 참조하세요.

1// Bulk write operation
2
3// Import MongoClient from the MongoDB node driver package
4const { MongoClient } = require("mongodb");
5
6// Replace the uri string with your MongoDB deployment's connection string
7const uri = "<connection string uri>";
8
9const client = new MongoClient(uri);
10
11async function run() {
12 try {
13 const database = client.db("sample_mflix");
14 const theaters = database.collection("theaters");
15
16 // Insert a new document into the "theaters" collection
17 const result = await theaters.bulkWrite([
18 {
19 insertOne: {
20 document: {
21 location: {
22 address: {
23 street1: "3 Main St.",
24 city: "Anchorage",
25 state: "AK",
26 zipcode: "99501",
27 },
28 },
29 },
30 },
31 },
32 {
33 insertOne: {
34 document: {
35 location: {
36 address: {
37 street1: "75 Penn Plaza",
38 city: "New York",
39 state: "NY",
40 zipcode: "10001",
41 },
42 },
43 },
44 },
45 },
46 {
47 // Update documents that match the specified filter
48 updateMany: {
49 filter: { "location.address.zipcode": "44011" },
50 update: { $set: { is_in_ohio: true } },
51 upsert: true,
52 },
53 },
54 {
55 // Delete a document that matches the specified filter
56 deleteOne: { filter: { "location.address.street1": "221b Baker St" } },
57 },
58 ]);
59 // Log the result of the bulk write operation
60 console.log(result);
61 } finally {
62 // Close the database connection when the operations are completed or if an error occurs
63 await client.close();
64 }
65}
66run().catch(console.dir);
1import { MongoClient } from "mongodb";
2
3// Replace the uri string with your MongoDB deployment's connection string.
4const uri = "<connection string uri>";
5
6const client = new MongoClient(uri);
7
8interface Address {
9 street1: string;
10 city: string;
11 state: string;
12 zipcode: string;
13}
14
15interface Theater {
16 location: { address: Address };
17 is_in_ohio?: boolean;
18}
19
20async function run() {
21 try {
22 const database = client.db("sample_mflix");
23 const theaters = database.collection<Theater>("theaters");
24
25 const result = await theaters.bulkWrite([
26 {
27 insertOne: {
28 document: {
29 location: {
30 address: {
31 street1: "3 Main St.",
32 city: "Anchorage",
33 state: "AK",
34 zipcode: "99501",
35 },
36 },
37 },
38 },
39 },
40 {
41 insertOne: {
42 document: {
43 location: {
44 address: {
45 street1: "75 Penn Plaza",
46 city: "New York",
47 state: "NY",
48 zipcode: "10001",
49 },
50 },
51 },
52 },
53 },
54 {
55 updateMany: {
56 // Important: You lose type safety when you use dot notation in queries
57 filter: { "location.address.zipcode": "44011" },
58 update: { $set: { is_in_ohio: true } },
59 upsert: true,
60 },
61 },
62 {
63 deleteOne: {
64 filter: { "location.address.street1": "221b Baker St" },
65 },
66 },
67 ]);
68
69 console.log(result);
70 } finally {
71 await client.close();
72 }
73}
74run().catch(console.dir);

앞의 예시를 실행하면 다음과 같은 결과가 출력됩니다.

BulkWriteResult {
insertedCount: 2,
matchedCount: 1,
modifiedCount: 1,
deletedCount: 0,
upsertedCount: 0,
upsertedIds: {},
insertedIds: {
'0': new ObjectId("..."),
'1': new ObjectId("...")
}
}

돌아가기

변화를 주시하세요