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