MongoDB 速習チュートリアル

MongoDB Update

既存のドキュメントを更新(アップデート)するには、updateOne() または updateMany() メソッドを使用します。

これらのメソッドでは、第 1 パラメータに「どのドキュメントを更新するか」を定義する クエリオブジェクト を指定し、第 2 パラメータに「どのようにデータを更新するか」を定義する アップデートオブジェクト を指定します。

1. updateOne() メソッド

updateOne() メソッドは、指定したクエリに一致するドキュメントのうち、最初に見つかった 1 件のみ を更新します。

まず、タイトルが "Post Title 1" である投稿の "likes" カウントを確認してみましょう。

実行例:

// 対象のドキュメントを検索して現在の状態を確認
db.posts.find( { title: "Post Title 1" } )

次に、この投稿の "likes" を 2 に更新します。これを行うには、$set オペレータを使用する必要があります。

実行例:

// title が一致するドキュメントの likes フィールドを 2 に更新
db.posts.updateOne( { title: "Post Title 1" }, { $set: { likes: 2 } } )

再度ドキュメントを確認すると、"likes" が更新されているのがわかります。

実行例:

// 更新結果の確認
db.posts.find( { title: "Post Title 1" } )

2. ドキュメントが見つからない場合の挿入 (upsert)

クエリに一致するドキュメントが見つからなかった場合に、新しくドキュメントを挿入したいときは、upsert オプションを使用します。

実行例:
ドキュメントを更新し、見つからない場合は新規挿入します。

db.posts.updateOne( 
  { title: "Post Title 5" }, 
  {
    $set: 
      {
        title: "Post Title 5",
        body: "投稿の本文です。",
        category: "イベント",
        likes: 5,
        tags: ["ニュース", "イベント"],
        date: Date()
      }
  }, 
  { upsert: true } // ドキュメントがなければ作成するオプション
)

3. updateMany() メソッド

updateMany() メソッドは、提供されたクエリに一致する すべてのドキュメント を更新します。

実行例:
すべてのドキュメントの "likes" を 1 ずつ増やします。ここでは、値を増加させる $inc (increment) オペレータを使用します。

// すべてのドキュメント ({}) を対象に、likes を 1 加算する
db.posts.updateMany({}, { $inc: { likes: 1 } })

実行後、すべてのドキュメントの "likes" を確認すると、それぞれの値が 1 ずつインクリメントされていることが確認できます。