Latest web development tutorials

MongoDB를 원자 작업

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 : { field : value } }

$ 설정 해제

키를 제거합니다.

{ $unset : { field : 1} }

$ Inc의

$ Inc의 문서 (디지털 전용의 요구 사항을 충족하기 위해) 증가 또는 감소 키 조작의 수치 일 수있다.

{ $inc : { field : value } }

$ 푸시

사용법 :

{ $push : { field : value } }

필드에 추가 된 값은이 필드가 존재하지 않는 경우는, 어레이 형 필드 일 수 있어야 내부 가서 새로운 어레이 형했다.

$ PushAll

$ 푸시와 함께,하지만 당신은 배열 필드에 여러 값을 추가 할 수 있습니다 후.

{ $pushAll : { field : value_array } }

$ 당겨

값과 동일한 값의 배열에서 필드를 삭제합니다.

{ $pull : { field : _value } }

$ AddToSet

배열에 값을 가산 한 값이 어레이 내에 있지 않은 경우에만 증가.

$ 팝

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

{ $pop : { field : 1 } }

$ 이름 바꾸기

필드 이름을 수정

{ $rename : { old_field_name : new_field_name } }

$ 비트

비트 연산, 정수 유형

{$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 } ] }