몽고DB 튜토리얼login
몽고DB 튜토리얼
작가:php.cn  업데이트 시간:2022-04-21 17:49:03

MongoDB 원자적 작업


Mongodb는 트랜잭션을 지원하지 않으므로 프로젝트에 적용할 때 주의하시기 바랍니다. 디자인이 무엇이든 데이터 무결성을 보장하기 위해 mongodb가 필요하지 않습니다.

그러나 mongodb는 문서 저장, 수정, 삭제 등 원자적 작업인 많은 원자적 작업을 제공합니다.

소위 원자 연산이란 문서가 Mongodb에 저장되거나, 쿼리된 문서가 완전히 저장되지 않는 상황이 발생하지 않음을 의미합니다.


원자적 연산 데이터 모델

다음의 도서관 도서 및 대출 정보 예시를 살펴보세요.

이 예에서는 원자성 작업(업데이트: 업데이트)과 관련된 포함된 필드가 동일한 문서에서 동기화되도록 하는 방법을 보여줍니다.

book = {
          _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.findAndModify() 메소드를 사용하여 도서 정산 가능 여부를 확인하고 새로운 정산 정보를 업데이트할 수 있습니다.

사용 가능한 필드와 체크아웃 필드를 동일한 문서에 삽입하여 해당 필드가 동기적으로 업데이트되도록 합니다.

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

원자성 작업을 위한 일반 명령

$set

은 키를 지정하고 키 값을 업데이트하는 데 사용됩니다. 키가 없으면 만듭니다.

{ $set : { field : value } }

$unset

은 키를 삭제하는 데 사용됩니다.

{ $unset : { field : 1} }

$inc

$inc는 값이 숫자인 문서의 키를 늘리거나 줄일 수 있습니다(요구 사항을 충족하는 숫자만 가능).

{ $inc : { field : value } }

$push

사용법:

{ $push : { field : value } }

필드에 값을 추가합니다. 필드가 없으면 새 배열이 추가됩니다. .

$pushAll

한 번에 여러 값을 배열 필드에 추가할 수 있다는 점을 제외하면 $push와 동일합니다.

{ $pushAll : { field : value_array } }

$pull

배열 필드에서 value와 동일한 값을 삭제합니다.

{ $pull : { field : _value } }

$addToSet

배열에 값을 추가하고, 값이 배열에 없는 경우에만 추가합니다.

$pop

배열의 첫 번째 또는 마지막 요소 삭제

{ $pop : { field : 1 } }

$rename

필드 이름 수정

{ $rename : { old_field_name : new_field_name } }

$ bit

비트 연산, 정수형

{$bit : { field : {and : 5}}}

오프셋 연산자

> t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", "votes" : 7 } ] }
 
> t.update( {'comments.by':'joe'}, {$inc:{'comments.$.votes':1}}, false, true )
 
> t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 4 }, { "by" : "jane", "votes" : 7 } ] }

PHP 중국어 웹사이트