Update Documents
MongoDB shell は、コレクション内のドキュメントを更新するために次のメソッドを提供します。
単一のドキュメントを更新するには、
db.collection.updateOne()
を使用します。複数のドキュメントを更新するには、
db.collection.updateMany()
を使用します。ドキュメントを置き換えるには、
db.collection.replaceOne()
を使用します。
このページの例は、Atlas サンプル データセットを参照しています。無料の MongoDB Atlas クラスターを作成し、そのクラスターにサンプル データを入力して、以下の例に従うことができます。詳細については、「Atlas スタートガイド」を参照してください。
更新演算子構文
MongoDB に付属する $set
などの更新演算子を使用して、フィールド値を変更するとドキュメントを更新できます。
更新演算子を使用するには、次の形式の更新ドキュメントを更新メソッドに渡します。
{ <update operator>: { <field1>: <value1>, ... }, <update operator>: { <field2>: <value2>, ... }, ... }
$set
などの一部の更新演算子は、フィールドがない場合にフィールドを作成します。詳細については、個々の更新演算子のリファレンスを参照してください。
単一ドキュメントの更新
db.collection.updateOne()
メソッドを使用して、指定フィルターに一致する最初のドキュメントを更新します。
注意
MongoDB はドキュメントの自然なソート順序を保持します。この順序付けは内部実装機能であり、その中の特定の構造を前提にしないようにしてください。詳細については、「自然な順序」を参照してください。
例
sample_mflix.movies
コレクション内で、title
が "Twilight"
と等しい最初のドキュメントを更新するには、次の操作を実行します。
use sample_mflix db.movies.updateOne( { title: "Twilight" }, { $set: { plot: "A teenage girl risks everything–including her life–when she falls in love with a vampire." }, $currentDate: { lastUpdated: true } })
アップデートの操作:
$set
演算子を使用して、映画「Twilight
」のplot
フィールドの値を更新します。$currentDate
演算子を使用して、lastUpdated
フィールドの値を現在の日付に更新します。lastUpdated
フィールドがない場合は、$currentDate
がフィールドを作成します。詳細については、「$currentDate
」を参照してください。
複数のドキュメントの更新
db.collection.updateMany()
を使用して、指定フィルターに一致するすべてのドキュメントを更新します。
例
security_deposit
が100
未満の場合に、sample_airbnb.listingsAndReviews
コレクション内のすべてのドキュメントを更新するには、次の操作を実行します。
use sample_airbnb db.listingsAndReviews.updateMany( { security_deposit: { $lt: 100 } }, { $set: { security_deposit: 100, minimum_nights: 1 } } )
更新操作では $set
演算子を使用して、security_deposit
フィールドの値を 100
に、minimum_nights
フィールドの値を1
に更新します。
ドキュメントの置き換え
_id
フィールド以外のドキュメントの内容全体を置き換えるには、完全に新しいドキュメントを db.collection.replaceOne()
の 2 番目の引数として渡します。
ドキュメントを置き換える場合、置き換えドキュメントにはフィールドと値のペアのみが含まれる必要があります。更新演算子の式は含めないでください。
置き換えドキュメントには、元のドキュメントとは異なるフィールドを含めることができます。置き換えドキュメントでは、_id
フィールドが不変であるため、 _id
フィールドを省略できます。ただし、_id
フィールドを含める場合は、現在値と同じ値である必要があります。
例
account_id: 371138
のsample_analytics.accounts
コレクションの最初のドキュメントを置き換えるには、次の操作を実行します。
db.accounts.replaceOne( { account_id: 371138 }, { account_id: 893421, limit: 5000, products: [ "Investment", "Brokerage" ] } )
更新されたドキュメントを読み取るには、次のコマンドを実行します。
db.accounts.findOne( { account_id: 893421 } )
更新動作
ドキュメント更新の具体的な動作の詳細については、「動作」を参照してください。
詳細
集計パイプラインを使用してドキュメントを更新する方法については、「集計パイプラインによる更新」を参照してください。
ドキュメントの更新に利用可能なすべての方法を確認するには、「更新方法」を参照してください。