MongoDB\Collection::findOneAndUpdate()
定義
パラメーター
$filter
: array|object- 更新するドキュメントを指定するフィルター条件。
$update
: array|object- 更新するフィールドと値の組み合わせと、関連する更新演算子を指定します。
$update
は MongoDB の更新演算子を使用します。 MongoDB 4.2以降では、このパラメーターとして集計パイプラインを渡すことができます。 $options
: 配列必要なオプションを指定する配列。
名前タイプ説明bypassDocumentValidation
ブール値
true
の場合、書込み操作によってドキュメント レベルの検証を回避できます。 デフォルトはfalse
です。arrayFilters
配列
配列フィールドの更新操作でどの配列要素を変更するかを決定するフィルタードキュメントの配列。
バージョン 1.3 で追加。
collation
array|object
照合順序を指定すると、大文字や小文字、アクセント記号など、string を比較するための言語独自のルールを指定できます。 照合を指定する場合、
locale
フィールドは必須です。その他の照合フィールドはすべてオプションです。 フィールドの説明については、 「照合ドキュメント」 を参照してください。照合が指定されていないが、コレクションにデフォルトの照合がある場合、操作はコレクションに指定された照合を使用します。 コレクションにも操作にも照合が指定されていない場合、MongoDB では以前のバージョンで使用されていた単純なバイナリ比較によって string が比較されます。
comment
混合
データベースプロファイラ、 currentOp出力、およびログから操作を追跡するのに役立つ任意のコメントを指定できるようにします。
このオプションは MongoDB 4.4 以降で使用可能であり、古いサーバー バージョンで指定すると実行時に例外が発生します。
バージョン 1.13 の新機能。
hint
string|array|object
使用するインデックス。 インデックス名を string またはインデックス キー パターンをドキュメントとして指定します。 指定すると、クエリ システムはヒント指定したインデックスを使用するプランのみを考慮します。
このオプションは MongoDB 4.4 以降で使用可能であり、古いサーバー バージョンで指定すると実行時に例外が発生します。
バージョン 1.7 の新機能。
maxTimeMS
integer
カーソルに対する情報処理操作の累積時間制限(ミリ秒単位)。 MongoDB は、次の割り込みポイントが最も近い時点で操作を中止します。
let
array|object
パラメーター名と値のマップ。 値は、ドキュメント フィールドを参照しない定数または閉じた式である必要があります。 その後、パラメーターには 集計式コンテキスト で変数としてアクセスできます(例:
$$var
)。これは 5.0 より前のサーバー バージョンではサポートされていないため、使用された場合は実行時に例外が発生します。
バージョン 1.13 の新機能。
プロジェクション
array|object
返される文書に含めるフィールドを決定するためのプロジェクション仕様。 MongoDB マニュアルの「 クエリ 演算子および プロジェクション 演算子 から返されるプロジェクト フィールド 」を 参照してください。
returnDocument
integer
アップデートを適用する前にドキュメントを返すか、アップデートを適用した後にドキュメントを返すかを指定します。
returnDocument
は次の値をサポートしています。MongoDB\Operation\FindOneAndUpdate::RETURN_DOCUMENT_BEFORE
(デフォルト)MongoDB\Operation\FindOneAndUpdate::RETURN_DOCUMENT_AFTER
セッション
操作に関連付けるクライアント セッション。
バージョン 1.3 で追加。
sort
array|object
結果の順序の並び替え指定。
typeMap
配列
型マップ カーソルに適用される 。これは、BSON ドキュメントが PHP 値に変換される方法を決定します。コレクションのタイプ マップがデフォルトになります。
これは返された結果ドキュメントに使用されます。
upsert
ブール値
true
に設定すると、クエリ条件に一致するドキュメントがない場合に新しいドキュメントが作成されます。 デフォルト値はfalse
で、一致するものが見つからない場合は新しいドキュメントを挿入しません。writeConcern
操作に使用する書込み保証 ( write concern )。 コレクションの書込み保証 (write concern) のデフォルトです。
トランザクションの一部である個々の操作に対して書込み保証 (write concern) を指定することはできません。 代わりに 、トランザクションを開始する ときに
writeConcern
オプションを設定します。
Return Values
returnDocument
オプションの指定値に応じて、元のドキュメントまたは更新されたドキュメントの配列またはオブジェクト。 デフォルトでは、元のドキュメントが返されます。 クエリに一致するドキュメントがない場合、 null
が返されます。 戻り値の型は、 typeMap
オプションによって異なります。
エラーと例外
MongoDB\Exception\UnexpectedValueException
サーバーからのコマンド応答が不正な形式であった場合、。
MongoDB\Exception\UnsupportedException
オプションが使用され、選択したサーバーでサポートされていない場合(例: collation
、 readConcern
、 writeConcern
)。
MongoDB\Exception\InvalidArgumentException
は、パラメータまたはオプションの解析に関連するエラーの場合は です。
MongoDB\Driver\Exception\RuntimeException 拡張レベルのその他のエラー(例:)。
動作
クエリ条件を評価する際、MongoDB は BSON types の独自の比較ルール に従って型と値を比較します。これは PHP の 比較と は異なります と 型の調整 ルール。特殊な BSON 型と一致する場合、クエリ条件はそれぞれの BSON クラス を使用する必要があります 拡張機能(例:MongoDB\BSON \ObjectId ObjectIdを使用 )
例
次の操作では、ビルド番号を"761"
に設定して、 test
データベース内のrestaurants
コレクション内の"40361708"
のrestaurant_id
を持つレストランを更新します。
$collection = (new MongoDB\Client)->test->restaurants; $updatedRestaurant = $collection->findOneAndUpdate( [ 'restaurant_id' => '40361708' ], [ '$set' => [ 'address.building' => '761' ]], [ 'projection' => [ 'address' => 1 ], 'returnDocument' => MongoDB\Operation\FindOneAndUpdate::RETURN_DOCUMENT_AFTER, ] ); var_dump($updatedRestaurant);
出力は次のようになります。
object(MongoDB\Model\BSONDocument)#20 (1) { ["storage":"ArrayObject":private]=> array(2) { ["_id"]=> object(MongoDB\BSON\ObjectId)#12 (1) { ["oid"]=> string(24) "594d5ef280a846852a4b3dee" } ["address"]=> object(MongoDB\Model\BSONDocument)#19 (1) { ["storage":"ArrayObject":private]=> array(4) { ["building"]=> string(3) "761" ["coord"]=> object(MongoDB\Model\BSONArray)#18 (1) { ["storage":"ArrayObject":private]=> array(2) { [0]=> float(-73.9925306) [1]=> float(40.7309346) } } ["street"]=> string(8) "Broadway" ["zipcode"]=> string(5) "10003" } } } }
その他の参照
MongoDB マニュアルのfindAndModifyコマンドに関する参考資料