リムーブ

based on v8

コレクションからのオブジェクトの削除

コレクションからオブジェクトを削除するためには、 Mongoシェルremove() ファンクションを使います。(他のドライバでも似たようなファクションがありますが、"delete"と呼ばれていることもあります。使用している driver's documentation を参照してください。)

remove()find() のように、削除するオブジェクトを指定するために、JSON-style のクエリドキュメントを引数として取ります。 remove() を引数なし、または空のドキュメント引数 {} で実行すると、コレクション内のすべてのドキュメントを削除します。いくつかの例を見てみましょう。

db.things.remove({}); // すべて削除 
db.things.remove({n:1}); // n==1をすべて削除 

メモリ内にドキュメントがあってそれを削除する場合、一番効率的な方法は _id を条件として指定することです。

db.things.remove({_id: myobject._id}); 

単純に、削除したいドキュメントそのものをselectorとして渡したいと考えるかもしれません。これは動作はしますが、非効率です。

References

ドキュメントが削除されたときに存在していた、そのドキュメントに対する参照はそのまま残りますが、これらの参照は評価されるときにnullを返します。

並列性とリムーブ

v1.3以上では、リムーブ処理が走っている間に、並列で別の処理の実行をサポートしています。アップデートとリムーブが(同じコレクション内で)同時に起こった場合、アップデートされたオブジェクトは削除されないことがあります(ほぼ同時に起こった場合これはさほど驚くことではないです)。このことを望まない場合、filter表現に、 {$atomic : true} を指定してください。

db.videos.remove( { rating : { $lt : 3.0 }, $atomic : true } ) 

このリムーブ操作は、完全にatomicです。しかし、この処理が実行中、他の処理はブロックされます。


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