MongoCollection
PHP Manual

MongoCollection::remove

(PECL mongo >=0.9.0)

MongoCollection::removeレコードをコレクションから削除する

説明

public mixed MongoCollection::remove ([ array $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" が設定されているときは、削除の状況 ("ok") と削除されたアイテム数 ("n") そして発生したエラー ("err") を連想配列で返します。設定されていないときは、削除の送信に成功すれば TRUE、失敗すれば FALSE を返します。

エラー / 例外

"safe" オプションが設定されていて削除に失敗した場合に MongoCursorException をスローします。

"safe" オプションが設定されているときに MongoCollection::$wtimeout ミリ秒以内に処理が終わらなければ MongoCursorTimeoutException をスローします。 これはサーバ上の操作を終了させるわけではなく、あくまでもクライアント側のタイムアウトです。

変更履歴

バージョン 説明
1.0.9 "safe" オプションに整数値がわたせるようになり (以前は booleans のみでした)、さらに "fsync" オプションが追加されました。
1.0.5 二番目のパラメータがオプションの配列に変わりました。1.0.5 より前のバージョンでは、二番目のパラメータは "justOne" オプションを表す boolean 値で、safe オプションはありませんでした。
1.0.11 "safe" が設定されている場合は、"not master" エラーで接続を切断するようになりました。
1.2.0 timeout オプションが追加されました。

例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--;
}

?>

参考

MongoDB コアドキュメントの » remove を参照ください。


MongoCollection
PHP Manual