To remove a document based on its ID, you need to ensure that you pass the ID as a MongoID object rather than just a string:
<?php
$id = '4b3f272c8ead0eb19d000000';
// will not work:
$collection->remove(array('_id' => $id), true);
// will work:
$collection->remove(array('_id' => new MongoId($id)), true);
?>
MongoCollection::remove
(PECL mongo >=0.9.0)
MongoCollection::remove — レコードをコレクションから削除する
説明
$criteria = array()
[, array $options = array()
]] )パラメータ
-
criteria -
削除したいレコードの条件。
-
options -
削除時のオプション。
-
"justOne"
条件にマッチするレコードを 1 件だけ削除します。
-
"safe"
boolean あるいは整数値で、デフォルトは
FALSEです。FALSEの場合、データベースからの応答を待たずにプログラムを続行します。TRUEの場合、プログラムはデータベースからの応答を待ち、 更新に失敗したときには MongoCursorException をスローします。レプリケーションを使っていてマスタを変更している場合、もし "safe" を使っていればドライバはマスタとの接続を切断して例外をスローし、 次の操作時に新しいマスタを探そうとします (新しいマスタに対して操作を再試行するかどうかは アプリケーション側で判断しなければなりません)。
レプリカセットで "safe" を 使わずに マスタを変更する場合は、ドライバがその変更について知るすべがありません。 そのため、何もエラーを出さずに書き込みに失敗し続けます。
safe が整数値の場合は、 指定した数のマシンで更新が成功するまでは成功したと見なしません (処理がタイムアウトした場合は例外をスローします。wtimeout を参照ください)。 これは、コレクションに設定された w 変数をオーバーライドします。
-
"fsync"
boolean で、デフォルトは
FALSEです。 更新操作がディスク上に同期されるまで成功とは見なさないようにさせます。TRUEの場合は "安全な" 追加操作が前提となり、 safe の設定をFALSEにオーバーライドします。 -
"timeout"
整数値。デフォルトは MongoCursor::$timeout です。 "safe" が設定されている場合に、クライアントがデータベースからの応答をどれだけ待つかを (ミリ秒単位で) 指定します。ここで指定した時間内にデータベースからの応答がない場合は MongoCursorTimeoutException がスローされます。
-
返り値
safe が設定されていれば、削除の状態を表す配列を返します。
それ以外の場合は、配列が空でないかどうかを表す boolean 値を返します (空の配列は追加されません)。
配列のフィールドについては MongoCollection::insert() のドキュメントを参照ください。
エラー / 例外
"safe" オプションが設定されていて削除に失敗した場合に MongoCursorException をスローします。
"safe" オプションが設定されているときに MongoCollection::$wtimeout ミリ秒以内に処理が終わらなければ MongoCursorTimeoutException をスローします。 これはサーバー上の操作を終了させるわけではなく、あくまでもクライアント側のタイムアウトです。
変更履歴
| バージョン | 説明 |
|---|---|
| 1.0.5 | 二番目のパラメータがオプションの配列に変わりました。1.0.5 より前のバージョンでは、二番目のパラメータは "justOne" オプションを表す boolean 値で、safe オプションはありませんでした。 |
| 1.0.9 | "safe" オプションに整数値がわたせるようになり (以前は booleans のみでした)、さらに "fsync" オプションが追加されました。 |
| 1.0.9 | "safe" オプションを使っている場合の返り値の型が配列に変わりました。 配列にはエラー情報が含まれています。"safe" オプションを使わない場合は、今までどおり boolean のままです。 |
| 1.0.11 | "safe" が設定されている場合は、"not master" エラーで接続を切断するようになりました。 |
| 1.2.0 | timeout オプションが追加されました。 |
| 1.3.0 |
options パラメータで、boolean
だけを渡して "justOne" を指定することができなくなりました。
同じことをするには array('justOne' => true)
としなければなりません。
|
例
例1 MongoCollection::remove() で justOne を使う例
<?php
$radioactive = $db->radioactive;
// プルトニウムがあとどれだけ残っているかを数えます
$remaining = $radioactive->count(array('type' => 94));
$halflife = $remaining/2;
// それを半減させます
while ($halflife > 0) {
$radioactive->remove(array('type' => 94), array("justOne" => true));
$halflife--;
}
?>
参考
- MongoCollection::insert() - 配列をコレクションに追加する
- MongoCollection::update() - 指定した条件にもとづいてレコードを更新する
- MongoDB コアドキュメントの » remove
