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