findandmodifyコマンド

based on v7

findして、modify (またはremove)

v1.3.0以上

MongoDB 1.3以上で、"findしてmodifyして、returnする" というコマンドをサポートしています。  このコマンドは、オブジェクトに対してアトミックな変更をし結果を取得する場合に便利です。また、このコマンドはsortオプションを持っていて、キューのようなデータを持つ場合に便利です。このコマンドは以下の形をとります。

db.runCommand( { findandmodify : <collection>,
                 <options> } )

mongoシェルには、findAndModify()というヘルパーメソッドがあります。いくつかのドライバにもヘルパーがあります。

下記の例は、まだ"取得"されていない優先度が最大のジョブを取得すると同時に、アトミックに"取得した"というマークをつけるものです。

job = db.jobs.findAndModify({
query: {inprogress:false},
sort:{priority:-1},
update: {$set: {inprogress: true}}
});

また、返されたオブジェクトを単純に削除することもできます。

job = db.jobs.findAndModify({sort:{priority:-1}, remove:true}}});

tests に他の例がありますので参照してください。

upadteかremoveの引数は必須です。その他の引数はオプションです。

引数 説明 デフォルト
query クエリーのためのフィルター {}
sort 複数のドキュメントがマッチした場合、この順序でソートした最初のオブジェクトが処理対象になります {}
remove 返却する前にオブジェクトを削除する場合にはtrueをセットしてください N/A
update modifier オブジェクト N/A
new オリジナルの値ではなくて、更新されたオブジェクトを戻り値として欲しい場合にtrueをセットします。removeが指定されている場合には無視されます。 false

ドライバがヘルパーファンクションを持っていない場合、次のコマンドを直接実行してください。

job = db.runCommand({ findandmodify : "jobs",
sort : { priority : -1 },
remove : true
}).value;

See Also


Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.

IF YOU HAVE A QUESTION, POST IT TO THE USER GROUP.

These pages are fine for comments, but for questions, your best bet will always be the MongoDB User Group.

blog comments powered by Disqus