문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

원자 조작용 모델 데이터

이 페이지의 내용

  • 패턴

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

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

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

이 페이지의 내용