AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

Update Documents

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

このガイドの例では、 Atlasサンプルデータセットsample_restaurantsデータベースのrestaurantsコレクションを使用します。 PHPアプリケーションからこのコレクションにアクセスするには、Atlas クラスターに接続するMongoDB\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

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

trueに設定すると、比較動作は フィールドの値によって異なります。strength

strength 1の場合、 PHPライブラリは基本文字と大文字と小文字を比較します。


- がstrength 2の場合、 PHPライブラリは基本文字、発音区別符号、その他のセカンダリ
レベルの相違、大文字と小文字を比較します。

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

falseに設定されている場合、 PHPライブラリには強度レベル1 または2

での大文字と小文字の比較が含まれません。データ型:bool
デフォルト:false

caseFirst



(任意)三次レベルの比較中に、大文字と小文字の相違のソート順序を指定します。データ型:string
デフォルト:"off"

strength

(任意) ICU

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

numericOrdering

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

trueに設定されている場合、 PHPライブラリは数字の string を数値として比較します。例、string10 と " "2 を比較する場合、ライブラリは string の数値を使用し、"10 " を "2 " より大きいものとして扱います。

falseに設定されている場合、 PHPライブラリは数字の string を string として比較します。例、string "10 " と " " を比較する場合、ライブラリは一度に2 1 文字ずつ比較し、" " を10 "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();
Modified documents: 206

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 ドキュメントを参照してください。