MongoDBのupdateOne()とinsertOne()の違いと使い方を実例で解説
MongoDBには、コレクションへのドキュメント追加や更新を行うための便利なメソッドが多数用意されています。本記事では、その中でも特によく使われる insertOne() と updateOne() の役割の違いと具体的な使い方を、実際のコード例とともにわかりやすく解説します。
- insertOne():コレクションに新しいドキュメントを1件挿入するメソッドです。
- updateOne():クエリフィルタ(検索条件)に一致したドキュメントのうち、最初の1件のみを更新するメソッドです。
insertOne()でサンプルコレクションを作成する
まずは insertOne() を使って、サンプル用のコレクション「demo735」に4件のドキュメントを挿入してみましょう。
> db.demo735.insertOne({id:1,Name:"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ead51b657bb72a10bcf0652")
}
> db.demo735.insertOne({id:1,Name:"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ead51bb57bb72a10bcf0653")
}
> db.demo735.insertOne({id:1,Name:"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ead51be57bb72a10bcf0654")
}
> db.demo735.insertOne({id:1,Name:"Carol"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ead51c757bb72a10bcf0655")
}find()で登録済みドキュメントを確認する
find() メソッドを使用すると、コレクション内のすべてのドキュメントを一覧表示できます。
> db.demo735.find();
上記のコマンドを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5ead51b657bb72a10bcf0652"), "id" : 1, "Name" : "Chris" }
{ "_id" : ObjectId("5ead51bb57bb72a10bcf0653"), "id" : 1, "Name" : "David" }
{ "_id" : ObjectId("5ead51be57bb72a10bcf0654"), "id" : 1, "Name" : "Bob" }
{ "_id" : ObjectId("5ead51c757bb72a10bcf0655"), "id" : 1, "Name" : "Carol" }updateOne()でドキュメントを更新する
続いて、updateOne() を実行し、「id: 1」に一致する最初のドキュメントの Name フィールドを「Robert」に変更します。更新には $set 演算子を使用します。
db.demo735.updateOne({id:1},{$set:{Name:"Robert"}});
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }結果に出力される matchedCount は条件に一致したドキュメントの数、modifiedCount は実際に更新が適用されたドキュメントの数を示しています。ここではどちらも「1」になっていることが確認できます。
それでは、再び find() メソッドで全ドキュメントを表示し、更新結果を確認してみましょう。
> db.demo735.find();
実行結果は以下の通りです。
{ "_id" : ObjectId("5ead51b657bb72a10bcf0652"), "id" : 1, "Name" : "Robert" }
{ "_id" : ObjectId("5ead51bb57bb72a10bcf0653"), "id" : 1, "Name" : "David" }
{ "_id" : ObjectId("5ead51be57bb72a10bcf0654"), "id" : 1, "Name" : "Bob" }
{ "_id" : ObjectId("5ead51c757bb72a10bcf0655"), "id" : 1, "Name" : "Carol" }最初のドキュメント(Chris)だけが「Robert」に更新され、他の3件(David、Bob、Carol)は元のまま変わっていないことがわかります。
まとめ
この例からわかるように、updateOne() は条件に一致するドキュメントが複数存在しても、最初の1件しか更新しません。一致するすべてのドキュメントを更新したい場合は updateMany() を使用してください。また、条件に合うドキュメントが存在しない場合に新規挿入も行いたいときは、updateOne() の upsert オプションが便利です。用途に応じてこれらのメソッドを適切に使い分けることで、MongoDBのデータ操作をより効率的に行えます。
-
MongoDBのアグリゲーションで$redact演算子を使う方法
$redact演算子とはMongoDBの$redactステージは、ドキュメント自体に格納されている情報に基づいて、各ドキュメントの内容を制限(フィルタリング)するための機能です。アグリゲーションフレームワークでは、$cond演算子を$redactと組み合わせることで、条件に応じてドキュメントを保持($$KEEP)するか除外($$PRUNE)するかを柔軟に制御できます。ここでは、実際のコード例を通して、$redactの基本的な使い方を見ていきましょう。サンプルコレクションの作成まず、insertOne()メソッドを使って、複数のドキュメントを含むコレクションを作成します。> db.demo
-
MongoDBで複数のドキュメントをアトミックに一括更新する方法
MongoDBでは、update()メソッドに更新演算子の$setを組み合わせることで、条件に一致した複数のドキュメントをまとめてアトミックに更新できます。本記事では、サンプルコレクションを使いながら、その具体的な手順を解説します。 1. サンプルコレクションの作成 まず、insertOne()メソッドを使ってドキュメントを含むコレクションを作成します。 > db.demo699.insertOne({Name:Chris Brown}); { acknowledged : true, insertedId : ObjectId(5ea6e370551299a9f98c93a