Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

Bulk.find.upsert()

이 페이지의 내용

  • 설명
  • 행동

MongoDB는 대량 쓰기 작업을 수행하기 위한 db.collection.bulkWrite() 메서드도 제공합니다.

Bulk.find.upsert()

업데이트 또는 교체 작업에 대해 업서트 옵션을 true로 설정하며 구문은 다음과 같습니다.

Bulk.find(<query>).upsert().update(<update>);
Bulk.find(<query>).upsert().updateOne(<update>);
Bulk.find(<query>).upsert().replaceOne(<replacement>);

upsert 옵션을 true로 설정한 경우 Bulk.find() 조건과 일치하는 문서가 없으면 업데이트 또는 교체 작업에서 삽입을 수행합니다. 일치하는 문서가 있는 경우 업데이트 또는 교체 작업을 통해 지정된 업데이트 또는 교체가 수행됩니다.

Bulk.find.upsert()를 다음 쓰기 작업에 사용합니다.

다음은 Bulk.find.upsert()와 함께 사용될 때 다양한 쓰기 작업의 삽입 동작을 설명합니다.

Bulk.find.replaceOne() 메서드는 필드와 값 쌍만 포함된 교체 문서를 매개변수로 받습니다.

var bulk = db.items.initializeUnorderedBulkOp();
bulk.find( { item: "abc123" } ).upsert().replaceOne(
{
item: "abc123",
status: "P",
points: 100,
}
);
bulk.execute();

Bulk.find.upsert() 옵션을 사용한 교체 작업이 삽입을 수행하는 경우 삽입된 문서는 교체 문서입니다. 교체 문서와 쿼리 문서 모두 _id 필드를 지정하지 않는 경우 MongoDB는 _id 필드를 추가합니다.

{
"_id" : ObjectId("52ded3b398ca567f5c97ac9e"),
"item" : "abc123",
"status" : "P",
"points" : 100
}

Bulk.find.updateOne() 메서드는 다음 중 하나를 매개변수로 허용합니다.

매개변수가 필드 및 값 쌍만 포함하는 교체 문서인 경우:

var bulk = db.items.initializeUnorderedBulkOp();
bulk.find( { status: "P" } ).upsert().updateOne(
{
item: "TBD",
points: 0,
inStock: true,
status: "I"
}
);
bulk.execute();

그런 다음 Bulk.find.upsert() 옵션을 사용한 업데이트 작업에서 삽입을 수행하면 삽입된 문서가 교체 문서가 됩니다. 교체 문서와 쿼리 문서 모두 _id 필드를 지정하지 않는 경우 MongoDB는 _id 필드를 추가합니다.

{
"_id" : ObjectId("52ded5a898ca567f5c97ac9f"),
"item" : "TBD",
"points" : 0,
"inStock" : true,
"status" : "I"
}

매개 변수업데이트 연산자 표현식만을 포함하는 업데이트 문서인 경우:

var bulk = db.items.initializeUnorderedBulkOp();
bulk.find( { status: "P", item: null } ).upsert().updateOne(
{
$setOnInsert: { qty: 0, inStock: true },
$set: { points: 0 }
}
);
bulk.execute();

그런 다음 Bulk.find.upsert() 옵션을 사용한 업데이트 작업이 삽입을 수행하는 경우 업데이트 작업은 Bulk.find() 메서드의 쿼리 문서에서 필드 및 값을 사용하여 문서를 삽입한 다음 업데이트 문서에서 지정된 업데이트를 적용합니다. 업데이트 문서와 쿼리 문서 모두 _id 필드를 지정하지 않는 경우 MongoDB는 다음과 같이 _id 필드를 추가합니다.

{
"_id" : ObjectId("5e28d1a1500153bc2872dadd"),
"item" : null,
"status" : "P",
"inStock" : true,
"points" : 0,
"qty" : 0
}

업데이트 메서드는 집계 파이프라인을 허용할 수 있습니다. 예를 들어 다음과 같은 용도로 사용할 수 있습니다.

  • $setOnInsert 업데이트 연산자 표현식과 다소 유사한 동작을 제공할 수 있는 $replaceRoot 단계,

  • $set 업데이트 연산자 표현식과 유사한 동작을 제공할 수 있는 $set 단계,

  • 집계 변수 NOW는 현재 날짜/시간으로 해석되며 $currentDate 업데이트 연산자 표현식과 유사한 동작을 제공할 수 있습니다.

var bulk = db.items.initializeUnorderedBulkOp();
bulk.find( { item: "Not Found", status: "P" } ).upsert().updateOne(
[
{ $replaceRoot: { newRoot: { $mergeObjects: [ { qty: 0, inStock: true }, "$$ROOT" ] } } },
{ $set: { points: 0, lastModified: "$$NOW" } }
]
);
bulk.execute();

그런 다음 Bulk.find.upsert() 옵션을 사용한 업데이트 작업이 삽입을 수행하면 업데이트 작업은 Bulk.find() 메서드의 쿼리 문서에서 필드 및 값이 포함된 문서를 삽입한 다음 지정된 집계 파이프라인을 적용합니다. 업데이트 문서와 쿼리 문서 모두 _id 필드를 지정하지 않는 경우 MongoDB는 다음과 같이 _id 필드를 추가합니다.

{
"_id" : ObjectId("5e28cf1e500153bc2872d49f"),
"qty" : 0,
"inStock" : true,
"item" : "Not Found",
"status" : "P",
"points" : 0,
"lastModified" : ISODate("2020-01-22T22:39:26.789Z")
}

다중 문서 업데이트 메서드 Bulk.find.update()와 함께 upsert()를 사용할 때 쿼리 조건과 일치하는 문서가 없으면 업데이트 작업은 단일 문서를 삽입합니다.

Bulk.find.update() 메서드는 다음 중 하나를 매개 변수로 허용합니다.

매개 변수업데이트 연산자 표현식만을 포함하는 업데이트 문서인 경우:

var bulk = db.items.initializeUnorderedBulkOp();
bulk.find( { status: "P" } ).upsert().update(
{
$setOnInsert: { qty: 0, inStock: true },
$set: { status: "I", points: "0" }
}
);
bulk.execute();

그런 다음 Bulk.find.upsert() 옵션이 있는 업데이트 작업이 삽입을 수행하는 경우 업데이트 작업은 Bulk.find() 메서드의 쿼리 문서의 필드 및 값을 사용하여 단일 문서를 삽입한 다음 업데이트 문서에서 지정된 업데이트를 적용합니다. 업데이트 문서와 쿼리 문서 모두 _id 필드를 지정하지 않는 경우 MongoDB는 다음과 같이 _id 필드를 추가합니다.

{
"_id": ObjectId("52ded81a98ca567f5c97aca1"),
"status": "I",
"qty": 0,
"inStock": true,
"points": "0"
}

업데이트 메서드는 집계 파이프라인을 허용할 수 있습니다. 예를 들어 다음과 같은 용도로 사용할 수 있습니다.

  • $setOnInsert 업데이트 연산자 표현식과 다소 유사한 동작을 제공할 수 있는 $replaceRoot 단계,

  • $set 업데이트 연산자 표현식과 유사한 동작을 제공할 수 있는 $set 단계,

  • 집계 변수 NOW는 현재 날짜/시간으로 해석되며 $currentDate 업데이트 연산자 표현식과 유사한 동작을 제공할 수 있습니다. NOW 값은 파이프라인 전체에서 동일하게 유지됩니다. 집계 변수에 액세스하려면 변수 앞에 이중 달러 기호($$)를 붙이고 따옴표로 묶습니다.

var bulk = db.items.initializeUnorderedBulkOp();
bulk.find( { item: "New Item", status: "P" } ).upsert().update(
[
{ $replaceRoot: { newRoot: { $mergeObjects: [ { qty: 0, inStock: true }, "$$ROOT" ] } } },
{ $set: { points: 0, lastModified: "$$NOW" } }
]
);
bulk.execute();

그런 다음 Bulk.find.upsert() 옵션을 사용한 업데이트 작업이 삽입을 수행하는 경우 업데이트 작업은 Bulk.find() 메서드의 쿼리 문서에서 필드 및 값을 사용하여 단일 문서를 삽입한 다음 집계 파이프라인을 적용합니다. 업데이트 문서와 쿼리 문서 모두 _id 필드를 지정하지 않는 경우 MongoDB는 다음과 같이 _id 필드를 추가합니다.

{
"_id" : ObjectId("5e2920a5b4c550aad59d18a1"),
"qty" : 0,
"inStock" : true,
"item" : "New Item",
"status" : "P",
"points" : 0,
"lastModified" : ISODate("2020-01-23T04:27:17.780Z")
}

다음도 참조하세요.

돌아가기

Bulk.find. 업데이트

이 페이지의 내용