Docs Menu

원자 조작용 모델 데이터

이 페이지의 내용

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가 되며 책을 결제할 수 없음을 나타냅니다.

이 페이지의 내용