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

원자 조작용 모델 데이터

이 페이지의 내용

  • 패턴

MongoDB 는 복제본 세트 및 샤딩된 클러스터에 대해 다중 문서 트랜잭션 을 지원하지만, 대부분의 시나리오에서 이 페이지에서 설명한 비정규화 데이터 모델 은 계속해서 데이터 및 사용 사례에 최적일 것입니다.

MongoDB에서 단일 문서에 대한 쓰기는 원자성 연산입니다. 함께 업데이트해야 하는 필드의 경우 동일한 문서 내에 필드를 포함하면 필드를 원자성으로 업데이트할 수 있습니다.

예를 들어, 현재 결제 정보뿐만 아니라 결제 가능한 부수를 포함하여 책에 대한 정보를 유지해야 하는 상황을 생각해 보세요.

결제 가능한 부수와 결제 정보가 동기화되어야 합니다. 따라서 동일한 문서 내에 available 필드와 checkout 필드를 삽입하면 두 필드를 원자적으로 업데이트할 수 있습니다.

{
_id: 123456789,
title: "MongoDB: The Definitive Guide",
author: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English",
publisher_id: "oreilly",
available: 3,
checkout: [ { by: "joe", date: ISODate("2012-10-15") } ]
}

그런 다음 새 결제 정보로 업데이트하려면 db.collection.updateOne() 메서드를 사용하여 available 필드와 checkout 필드를 모두 다음과 같이 원자적으로 업데이트할 수 있습니다.

db.books.updateOne (
{ _id: 123456789, available: { $gt: 0 } },
{
$inc: { available: -1 },
$push: { checkout: { by: "abc", date: new Date() } }
}
)

이 작업은 다음과 같이 작업 상태에 대한 정보가 포함된 문서를 반환합니다.

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

matchedCount 필드는 1 문서가 업데이트 조건과 일치했음을 보여주고, modifiedCount는 연산이 1 문서를 업데이트했음을 보여줍니다.

업데이트 조건과 일치하는 문서가 없으면 matchedCountmodifiedCount 0가 되며 책을 결제할 수 없음을 나타냅니다.

돌아가기

특정 애플리케이션 컨텍스트

이 페이지의 내용