MongoCollection::remove

(PECL mongo >=0.9.0)

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

説明

public MongoCollection::remove ([ array $criteria = array() [, array $options = array() ]] ) : bool|array

パラメータ

criteria

削除したいレコードの条件。

options

削除時のオプションの配列。 現在利用可能なオプションは、以下のとおりです。

  • "w"

    WriteConcerns を参照ください。MongoClient でのデフォルト値は 1 です。

  • "justOne"

    TRUE を指定すると、条件にマッチするレコードを 1 件だけ削除します。 FALSE を指定したり省略したりした場合は、条件にマッチするすべてのレコードを削除します。

  • "fsync"

    Boolean 型で、デフォルトは FALSE です。 ジャーナリングが有効な場合、これは "j" とまったく同じ動きをします。 ジャーナリングが有効でない場合は、追加をディスク上のデータベースファイルに同期させるまで成功したと見なさないようになります。 TRUE にすると確認つき書き込みが暗黙のうちに設定され、"w" の値を 0 にします。

    注意: ジャーナリングが有効な場合は、"fsync" のかわりに "j" を使いましょう。 "fsync""j" を同時に指定すると、エラーになります。

  • "j"

    デフォルトは FALSE です。これを指定すると、追加をジャーナルに同期させるまで成功したと見なさないようになります。TRUE にすると確認付き書き込みと見なされ、"w" の設定を 0 に上書きします。

    注意: このオプションを使っているときにジャーナリングを無効にすると、MongoDB 2.6 以降ではエラーが発生して書き込みに失敗します。古いバージョンのサーバーでは、単純にオプションの指定を無視します。

  • "socketTimeoutMS"

    このオプションは、ソケット通信の制限時間を、ミリ秒単位で指定します。この時間内にサーバーからの反応がなければ、MongoCursorTimeoutException をスローします。この場合、サーバー側で書き込み処理が行われたのかどうかを判断できなくなります。-1 を指定すると、永遠にブロックします。MongoClient のデフォルト値は 30000 (30 秒) です。

  • "w"

    WriteConcerns を参照ください。MongoClient でのデフォルト値は 1 です。

  • "wTimeoutMS"

    このオプションは、書き込み確認を待つ制限時間をミリ秒単位で指定します。これが書き込み操作に適用されるのは、"w"1 より大きい場合のみです。というのも、タイムアウトはレプリケーションに関する機能だからです。この時間内に書き込み確認ができなかった場合は MongoCursorException をスローします。0 を指定すると、永遠にブロックし続けます。MongoClient でのデフォルトは 10000 ミリ秒 (10 秒) です。

以下のオプションは廃止予定です。使ってはいけません。

  • "safe"

    非推奨。write concernw オプションを使いましょう。

  • "timeout"

    非推奨。"socketTimeoutMS" のエイリアス。

  • "wtimeout"

    廃止予定。"wTimeoutMS" のエイリアスです。

返り値

"w" が設定されていれば、削除の状態を表す配列を返します。 それ以外の場合は TRUE を返します。

状態を表す配列のフィールドについては MongoCollection::insert() のドキュメントを参照ください。

エラー / 例外

"w" オプションが設定されていて書き込みが失敗した場合に MongoCursorException をスローします。

"w" オプションの値が 1 より大きく設定されていて、操作の完了までの時間が MongoCursor::$timeout ミリ秒をこえた場合に MongoCursorTimeoutException をスローします。サーバー上での操作は止めません。これはクライアント側でのタイムアウトです。MongoCollection::$wtimeout はミリ秒です。

変更履歴

バージョン 説明
1.5.0

"wTimeoutMS" オプションが追加されました。これは "wtimeout" を置き換えるものです。 "wtimeout" を使うと E_DEPRECATED が発生します。

"socketTimeoutMS" オプションが追加されました。これは "timeout" を置き換えるものです。 "timeout" を使うと E_DEPRECATED が発生します。

"safe" を使うと E_DEPRECATED が発生します。

1.3.4 "wtimeout" オプションが追加されました。
1.3.0

"w" オプションが追加されました。

options パラメータで、boolean だけを渡して "justOne" を指定することができなくなりました。 同じことをするには array('justOne' => true) としなければなりません。

1.2.11 optionsscalar のときに E_DEPRECATED を発行するようになりました。
1.2.0 "timeout" オプションが追加されました。
1.0.11 "safe" が設定されている場合は、"not master" エラーで接続を切断するようになりました。
1.0.9

"safe" オプションに整数値がわたせるようになりました (以前は boolean のみでした)。

"fsync" オプションが追加されました。

"safe" オプションを使っている場合の返り値の型が配列に変わりました。 配列にはエラー情報が含まれています。"safe" オプションを使わない場合は、今までどおり boolean のままです。

1.0.5 二番目のパラメータがオプションの配列に変わりました。1.0.5 より前のバージョンでは、二番目のパラメータは "safe" オプションを表す boolean 値でした。

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

?>

参考

add a note add a note

User Contributed Notes 2 notes

up
17
David Winter
9 years ago
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);
?>
up
8
konstantin718 at gmail dot com
6 years ago
If you try to remove a document that doesn't exist, remove() won't throw an exception.

Even if 'w' is set to 1, remove() will return an array similar to this:

Array ( [n] => 0 [connectionId] => 10726 [err] => [ok] => 1 )

So, in order to see if a remove() was really successful, you need to look at [n] key.  If it's 0, that means the remove() did not remove any documents.

If remove() is successful, [n] will be > 0.
To Top