ドキュメントの変更
Overview
MongoDB コレクション内のドキュメントを変更するには、更新操作と置換操作を使用します。 更新操作は、ドキュメントのフィールドと値を変更しながら、他のフィールドと値を変更せずに維持します。 置換操作は、 _id
フィールド値を変更せずに、既存のドキュメント内のすべてのフィールドと値を指定されたフィールドと値で置き換えます。
Node.js ドライバーは、ドキュメントを変更するための次のメソッドを提供します。
updateOne()
updateMany()
replaceOne()
Tip
インタラクティブ ラボ
このページには、 updateMany()
メソッドを使用してデータを変更する方法を示す短いインタラクティブ ラボが含まれています。 MongoDB やコード エディターをインストールしなくても、ブラウザ ウィンドウでこのラボを直接完了できます。
ラボを開始するには、ページ上部の [ Open Interactive Tutorialボタンをクリックします。 ラボを全画面形式に展開するには、ラボ ペインの右上隅にある全画面ボタン( ⛶ )をクリックします。
Update Documents
1 つ以上のドキュメントに対して更新を実行するには、更新演算子(実行する更新のタイプ)と変更を説明するフィールドと値を指定する更新ドキュメントを作成します。 更新ドキュメントは、次の形式を使用します。
{ <update operator>: { <field> : { ... }, <field> : { } }, <update operator>: { ... } }
更新ドキュメントの最上位には、次の更新演算子が 1 つ以上含まれています。
$set
: フィールドの値を指定された値に置き換えます$inc
: フィールド値を増減します$rename
: フィールドの名前を変更します$unset
: フィールドを削除します$mul
: フィールド値に指定した数値を乗算します
更新演算子とその使用方法の完全なリストについては、MongoDB Server のマニュアルを参照してください。
更新演算子は、更新ドキュメント内の関連するフィールドにのみ適用されます。
注意
更新操作における集計パイプライン
MongoDB バージョン4.2以降を使用している場合は、更新操作で 集計ステージ のサブセットで構成された集計パイプラインを使用できます。 更新操作で使用される集計パイプラインで MongoDB がサポートする集計ステージの詳細については、 集計パイプラインを使用して更新を構築するに関するチュートリアル を参照してください。
例
販売商品、その価格、利用可能な数量を説明するフィールドを持つmyDB.items
コレクション内のドキュメントを例にとります。
{ _id: 465, item: "Hand-thrown ceramic plate", price: 32.50, quantity: 7, }
quantity
に新しい値を使用して$set
更新演算子を適用すると、次の更新ドキュメントを使用できます。
const myDB = client.db("myDB"); const myColl = myDB.collection("items"); const filter = { _id: 465 }; // update the value of the 'quantity' field to 5 const updateDocument = { $set: { quantity: 5, }, }; const result = await myColl.updateOne(filter, updateDocument);
更新されたドキュメントは次のようになりますquantity
フィールドの値が更新され、他のすべての値は変更されていません。
{ _id: 465, item: "Hand-thrown ceramic plate", price: 32.50, quantity: 5, }
アップデート操作がコレクション内のいずれかのドキュメントと一致しない場合、変更は行われません。 更新操作はアップサートを実行するように構成できます。これは更新の実行を試みますが、一致するドキュメントがない場合は、指定されたフィールドと値を持つ新しいドキュメントを挿入します。
ドキュメントの_id
フィールドを変更したり、 一意のインデックス制約に違反する値にフィールドを変更したりすることはできません。 一意なインデックス の詳細については、MongoDB Server マニュアルを参照してください。
ドキュメントの置き換え
置換操作を実行するには、置換操作で使用するフィールドと値で構成される置換ドキュメントを作成します。 Replacement documents use the following format:
{ <field>: { <value> }, <field>: { ... } }
置換ドキュメントとは、クエリフィルターに一致する既存のドキュメントを置き換えるドキュメントです。
例
販売商品、その価格、利用可能な数量を説明するフィールドを持つmyDB.items
コレクション内のドキュメントを例にとります。
{ _id: 501, item: "3-wick beeswax candle", price: 18.99, quantity: 10, }
このドキュメントを、完全に異なるアイテムの説明を含むドキュメントに置き換えたいとします。 置き換え操作は、次のようになります。
const myDB = client.db("myDB"); const myColl = myDB.collection("items"); const filter = { _id: 501 }; // replace the matched document with the replacement document const replacementDocument = { item: "Vintage silver flatware set", price: 79.15, quantity: 1, }; const result = await myColl.replaceOne(filter, replacementDocument);
置換されたドキュメントには、次のように、置換ドキュメントの内容と不変の_id
フィールドが含まれます。
{ _id: 501, item: "Vintage silver flatware set", price: 79.15, quantity: 1, }
置き換え操作がコレクション内のいずれかのドキュメントと一致しない場合、変更は行われません。 置換操作はアップサートを実行するように構成できます。これにより置換が実行されます。一致するドキュメントがない場合は、指定されたフィールドと値を持つ新しいドキュメントが挿入されます。
ドキュメントの_id
フィールドを変更したり、 一意のインデックス制約に違反する値にフィールドを変更したりすることはできません。 一意なインデックス の詳細については、MongoDB Server マニュアルを参照してください。