AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

Update Documents

このガイドでは、 MongoDB PHPライブラリを使用してMongoDBコレクション内のドキュメントを更新する方法を学習できます。 単一のドキュメントを更新するにはMongoDB\Collection::updateOne()メソッドを、複数のドキュメントを更新するにはMongoDB\Collection::updateMany()メソッドを呼び出します。

restaurantssample_restaurantsこのガイドの例では、Atlasサンプルデータセットの データベースの コレクションを使用します。 PHPアプリケーションからこのコレクションにアクセスするには、AtlasMongoDB\Client クラスターに接続する をインスタンス化し、次の値を 変数に割り当てます。$collection

$collection = $client->sample_restaurants->restaurants;

無料の MongoDB 配置を作成し、サンプルデータセットを読み込む方法については、MongoDB の スタートガイドを参照してください。

MongoDB では、次の方法で更新操作を実行できます。

  • MongoDB\Collection::updateOne()は、検索条件に一致する最初のドキュメントを更新します。

  • MongoDB\Collection::updateMany()は、検索条件に一致するすべてのドキュメントを更新します

各更新方法には次のパラメーターが必要です。

  • クエリフィルタードキュメント: 更新するドキュメントを指定します。 クエリフィルターの詳細については、 MongoDB Serverマニュアルの「クエリフィルター ドキュメント 」セクションを参照してください。

  • ドキュメントの更新:更新演算子、または実行する更新の種類と、変更するフィールドと値を指定します。 更新演算子とその使用方法のリストについては、 MongoDB Serverマニュアルの「フィールド更新演算子 」のガイドを参照してください。

次の例では、 updateOne()メソッドを使用して、 restaurantsコレクション内のドキュメントのname値を'Bagels N Buns'から'2 Bagels 2 Buns'に更新します。

$result = $collection->updateOne(
['name' => 'Bagels N Buns'],
['$set' => ['name' => '2 Bagels 2 Buns']],
);

次の例では、 updateMany()メソッドを使用して、 cuisineの値が'Pizza'であるすべてのドキュメントを更新します。 更新後、ドキュメントのcuisine値は'Pasta'になります。

$result = $collection->updateMany(
['cuisine' => 'Pizza'],
['$set' => ['cuisine' => 'Pasta']],
);

オプション値を指定する配列をパラメーターとして渡すことで、 updateOne()メソッドとupdateMany()メソッドの動作を変更できます。 次の表では、 配列に設定できるオプションの一部を説明しています。

オプション
説明

upsert

クエリフィルターに一致するドキュメントがない場合に、更新操作でアップサート操作を実行するかどうかを指定します。詳細については、MongoDB Server マニュアルの アップサート ステートメント を参照してください。
デフォルトは false です。

bypassDocumentValidation

アップデート操作がドキュメント検証をバイパスするかどうかを指定します。これにより、スキーマ検証要件を満たさないドキュメントを更新することができます(存在する場合)。スキーマ検証の詳細については、 MongoDB Serverマニュアルの「 スキーマバリデーション 」を参照してください。デフォルトは
falseです。

sort

updateOne() にのみ適用する。更新操作を実行する前にドキュメントに適用するソート順序を指定します。

collation

結果をソートするときに使用する言語照合の種類を指定します。詳細については、このページの「照合」セクションを参照してください。

arrayFilters

操作で配列フィールドが変更される場合に、アップデートを適用する配列要素を指定します。

hint

ドキュメントをスキャンするインデックスを設定します。詳細については、 MongoDB Serverマニュアルの ヒント ステートメントを参照してください。

writeConcern

操作の書込み保証 (write concern)を設定します。詳細については、 MongoDB Serverマニュアルの「 書込み保証 」を参照してください。

let

操作の読みやすさを向上させるために、 の値のリストを含むドキュメントを指定します。値は、ドキュメントフィールドを参照しない定数または閉じた式である必要があります。詳細については、 MongoDB Serverマニュアルの let ステートメントを参照してください。

comment

操作に添付するコメント。詳細については、 MongoDB Serverマニュアルの 「挿入コマンド フィールドのガイド」を参照してください。

次の例では、 updateMany()メソッドを使用して、 boroughの値が'Manhattan'であるすべてのドキュメントを検索します。 次に、これらのドキュメントのborough値を'Manhattan (north)'にアップデートします。 upsertオプションがtrueに設定されているため、クエリフィルターが既存のドキュメントと一致しない場合、 MongoDB PHPライブラリは新しいドキュメントを挿入します。

$result = $collection->updateMany(
['borough' => 'Manhattan'],
['$set' => ['borough' => 'Manhattan (north)']],
['upsert' => true],
);

操作の 照合 を指定するには、collation オプションを設定する $options 配列パラメータを操作メソッドに渡します。照合ルールを構成する配列に collation オプションを割り当てます。

次の表では、照合を構成するために設定できるフィールドについて説明しています。

フィールド
説明

locale

(必須)Unicode 用の国際コンポーネント(ICU)ロケールを指定します。サポートされているロケールのリストについては、 MongoDB Serverマニュアルの 「照合ロケールとデフォルト パラメーター」

を参照してください。データ型:string

caseLevel

(任意) 大文字と小文字の比較を含めるかどうかを指定します。

truestrengthに設定すると、比較の動作は

strength1
フィールドの値に応じて変わります。 - が の場合、PHP ライブラリは基本文字と大文字と小文字を比較します。

-strength が2 の場合、PHP
ライブラリは基本文字、分音符号、その他のセカンダリの違い、および大文字と小文字を比較します。

-strength がその他の値の場合、このフィールドは無視されます。

false に設定すると、PHP ライブラリは強度レベル 1 または 2 での大文字と小文字の比較を含めません。

データ型: bool
デフォルト: false

caseFirst

(任意) 三次レベルの比較中の大文字と小文字の相違のソート順序を指定します。

データ型: string
デフォルト: "off"

strength

(任意) ICU

ドキュメントで定義されている比較のレベルを指定します。データ型:int
デフォルト:3

numericOrdering

(任意)ドライバーが数字の string を数値として比較するかどうかを指定します。

trueに設定されている場合、 PHPライブラリは数字の string を数値として比較します。例は、""10 2という文字列を比較する場合、および10 "q" では、ライブラリは string の数値を使用し、""2 として「

」より大きい場合、false に設定されている場合、 PHPライブラリは数字の string を string として比較します。例は、"" という文字列を比較する場合、および10 2"q" では、ライブラリは一度に 110 文字ずつ比較し、""2 を処理します「

」未満であるため、詳細については、 MongoDB Serverマニュアルの「 照合制限

」を参照してください。データ型:bool
デフォルト:false

alternate

(任意) ライブラリが空白と句読点を比較目的の基本文字として考慮するかどうかを指定します。

データ型: string
デフォルト: "non-ignorable"

maxVariable

(任意) alternate フィールドが "shifted" に設定されている場合、ライブラリが無視できる文字を指定します。

データ型: string
デフォルト: "punct"

backwards

(任意) 発音区別符号を含む string を、string の後ろから前にソートするかどうかを指定します。

データ型: bool
デフォルト: false

照合と各フィールドに可能な値の詳細については、 MongoDB Serverマニュアルの「 照合 」エントリを参照してください。

updateOne()メソッドとupdateMany()メソッドはMongoDB\UpdateResultクラスのインスタンスを返します。 このクラスには、次のメンバー関数が含まれています。

関数
説明

getMatchedCount()

アップデートされた数に関係なく、クエリフィルターに一致したドキュメントの数を返します。

getModifiedCount()

更新操作によって変更されたドキュメントの数を返します。 更新されたドキュメントが元と同一の場合、このカウントには含まれません。

isAcknowledged()

サーバーが書き込み (write) 操作を認識したかどうかを示すブール値を返します。

getUpsertedCount()

データベースにアップサートされたドキュメントの数を返します。

getUpsertedId()

ドライバーがアップサートを実行した場合、データベースでアップサートされたドキュメントのIDを返します。

次の例では、 updateMany()メソッドを使用して、一致するドキュメントのnameフィールドを'Dunkin' Donuts'から'Dunkin''にアップデートします。 変更されたドキュメントの数を出力するには、 getModifiedCount()メンバー関数を呼び出します。

$result = $collection->updateMany(
['name' => 'Dunkin\' Donuts'],
['$set' => ['name' => 'Dunkin\'']],
);
echo 'Modified documents: ', $result->getModifiedCount();

MongoDB\Builder\Updateクラスを使用すると、IDE コード完了とPHPタイプ チェックをサポートして更新ドキュメントを作成できます。Updateクラスは、$set、$inc、$unset などのMongoDB更新演算子に対応するファクトリー メソッドを提供します。

更新 ビルダを使用するには、次の クラスをアプリケーションにインポートします 。

use MongoDB\Builder\Query;
use MongoDB\Builder\Update;

次の例ではUpdate::set() ファクトリー メソッドを使用して、restaurantsコレクション内の name 値が 'Bagels N Buns' である最初の一致するドキュメントの nameフィールドを '2 Bagels 2 Buns' に更新します。

$result = $collection->updateOne(
Query::query(name: Query::eq('Bagels N Buns')),
Update::set(name: '2 Bagels 2 Buns'),
);

1 つの操作で複数の更新演算子を適用するには、演算子を MongoDB\Builder\Update コンストラクターに渡します。次の例では、Update::set() と Update::unset() を組み合わせて、cuisineフィールドをPasta に設定し、cuisine 値が 'Pizza' であるすべてのドキュメントから gradesフィールドを削除します。

$result = $collection->updateMany(
Query::query(cuisine: Query::eq('Pizza')),
new Update(
Update::set(cuisine: 'Pasta'),
Update::unset('grades'),
),
);

ビルダ クラスの詳細とその他の例については、ビルダを使用した操作 ガイドを参照してください。

クエリフィルターの作成の詳細については、「クエリの指定」ガイドを参照してください。

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。