MongoDBでデータを更新する方法|update()メソッドの基本と使い方
MongoDBで既存のデータを更新するには、update()メソッドを使用します。本記事では、実際にコレクションを作成し、ドキュメントを挿入してから、update()を使ってデータを更新する一連の手順を解説します。
1. コレクションにドキュメントを挿入する
まず、insertOne()メソッドを使って、コレクション「demo110」に3つのドキュメントを作成します。
> db.demo110.insertOne({"Name":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2eeb949fd5fd66da21447b")
}
> db.demo110.insertOne({"Name":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2eeb9f9fd5fd66da21447c")
}
> db.demo110.insertOne({"Name":"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2eeba39fd5fd66da21447d")
}2. find()で全ドキュメントを確認する
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo110.find();
上記のコマンドを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e2eeb949fd5fd66da21447b"), "Name" : "Chris" }
{ "_id" : ObjectId("5e2eeb9f9fd5fd66da21447c"), "Name" : "David" }
{ "_id" : ObjectId("5e2eeba39fd5fd66da21447d"), "Name" : "Bob" }3. update()でデータを更新する
続いて、MongoDBでデータを更新するためのクエリを見ていきましょう。ここでは、特定の_idを持つドキュメントを対象に、$set演算子を使って「Name」フィールドの値を「Robert」に変更します。
>db.demo110.update({_id:ObjectId("5e2eeb9f9fd5fd66da21447c")},{$set:{"Name":"Robert"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })実行結果として返される WriteResult の内容は以下の通りです。
- nMatched: 1 — 条件に一致したドキュメントが1件あったことを示します。
- nUpserted: 0 — 新規に挿入(アップサート)されたドキュメントはないことを示します。
- nModified: 1 — 実際に更新されたドキュメントが1件であることを示します。
4. 更新結果を確認する
最後に、再度find()メソッドを実行して、コレクション内のすべてのドキュメントを表示します。
> db.demo110.find();
実行すると、次の出力が得られます。「David」だったドキュメントが「Robert」に更新されていることが確認できます。
{ "_id" : ObjectId("5e2eeb949fd5fd66da21447b"), "Name" : "Chris" }
{ "_id" : ObjectId("5e2eeb9f9fd5fd66da21447c"), "Name" : "Robert" }
{ "_id" : ObjectId("5e2eeba39fd5fd66da21447d"), "Name" : "Bob" }まとめ
MongoDBでのデータ更新は、update()メソッドと$set演算子を組み合わせることで簡単に行えます。第一引数に更新対象の条件(この例では_id)を指定し、第二引数に$setを使って変更したいフィールドと値を渡すだけです。なお、最新のMongoDBではupdateOne()やupdateMany()といったより明確なメソッドの使用も推奨されているので、用途に応じて使い分けるとよいでしょう。
-
MongoDB運用に役立つヒント集:パート1
本記事はTricoreが2017年8月2日に公開した記事をもとにしています。 MongoDBは導入のハードルが低く、手軽に使い始められるデータベースです。しかし、実際にアプリケーションを構築し始めると、より複雑な課題に直面することが少なくありません。たとえば、次のような疑問が浮かぶかもしれません。 レプリカセット内のメンバーを再同期するにはどうすればよいのか? クラッシュ後にMongoDBを復旧させるには? ファイルの保存・取得にGridFSを使うべきケースはいつか? 破損したデータはどうやって修復するのか? この記事では、MongoDBを使用する際にこうした状況へ対処するための実用的なヒ
-
MongoDBのディスク使用量を理解する――領域割り当ての仕組みと最適化の判断基準
はじめにMongoDBを使い始めたばかりの方にとって、そのディスク(スペース)使用量は一見すると分かりにくいものです。本記事では、MongoDBがどのようにディスク領域を割り当てるのか、そしてObjectRocketダッシュボードに表示される使用量情報をどう読み解けばよいのかを解説します。これにより、インスタンスのコンパクション(最適化)が必要なタイミングや、シャードを追加して利用可能領域を拡張すべきタイミングを適切に判断できるようになります。検証環境:5GBシングルシャードのMediumインスタンスまず、5GBのシャード1つで構成された真っさらなMediumインスタンスを用意します。このイン