MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBのタグレコードをすばやく更新する方法


はじめに

MongoDBで配列内の特定の要素(タグなど)を更新したい場合、updateコマンドと位置演算子「$」を組み合わせるのが効果的です。本記事では、実際のコード例を通じて、タグレコードを効率よく更新する手順をわかりやすく解説します。

サンプルコレクションの作成

まず、タグ情報を配列として持つドキュメントを格納するコレクションを作成しましょう。insertOne()メソッドを使ってドキュメントを挿入します。

> db.demo713.insertOne(
...    {
...       tags:
...       [
...          {
...             id:101,
...             Name:"Tag-1"
...          },
...          {
...             id:102,
...             Name:"Tag-3"
...          },
...          {
...             id:103,
...             Name:"Tag-3"
...          }
...       ]
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea8625a5d33e20ed1097b87")
}

挿入したドキュメントの確認

find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。

> db.demo713.find();

上記のクエリを実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5ea8625a5d33e20ed1097b87"), "tags" : [ { "id" : 101, "Name" : "Tag-1" }, { "id" : 102, "Name" : "Tag-3" }, { "id" : 103, "Name" : "Tag-3" } ] }

タグレコードの更新クエリ

続いて、タグを更新するためのクエリを見ていきましょう。ここでは「tags.id」が102である配列要素を検索し、位置演算子「$」を使って、その要素のNameフィールドのみを「Tag-2」に更新しています。

なお、update()の第3引数のfalseはアップサート(該当ドキュメントが存在しない場合の新規作成)を行わない設定、第4引数のtrueは複数ドキュメントの更新を許可する設定を意味します。

> db.demo713.update({"tags.id":102},{$set:{"tags.$.Name":"Tag-2"}},false,true);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

実行結果の「nModified : 1」から、1件のドキュメントが正常に更新されたことが確認できます。

更新結果の確認

再度find()メソッドを実行し、pretty()を付けて整形された形式で表示してみましょう。

> db.demo713.find().pretty();

実行すると、次の出力が得られます。

{
   "_id" : ObjectId("5ea8625a5d33e20ed1097b87"),
   "tags" : [
      {
         "id" : 101,
         "Name" : "Tag-1"
      },
      {
         "id" : 102,
         "Name" : "Tag-2"
      },
      {
         "id" : 103,
         "Name" : "Tag-3"
      }
   ]
}

まとめ

出力結果を見ると、idが102のタグのNameが「Tag-2」へ正しく更新されていることがわかります。このように、位置演算子「$」を活用すれば、配列内の条件に一致した要素だけをピンポイントで更新でき、他のデータに影響を与えることなく安全にドキュメントを修正できます。配列型のフィールドを扱う際には、ぜひ覚えておきたいテクニックです。

  1. MongoDBで配列内の要素を更新する方法|$setと位置演算子$の使い方を解説

    MongoDBで配列内の要素を更新する基本 MongoDBでドキュメント内の配列の要素を更新するには、update()メソッドに $set 演算子と位置演算子「$」を組み合わせて使用します。この組み合わせにより、クエリ条件に一致した配列要素だけをピンポイントで書き換えることができます。 ステップ1:コレクションの作成とドキュメントの挿入 まず、insertOne() メソッドを使ってサンプルデータを登録します。ここでは、大学名(CollegeName)と学費(Fees)を含む「CollegeDetails」という配列を持つドキュメントを1件作成しました。 > db.demo494.in

  2. MongoDBで指定した件数のレコードを取得するには?limit()メソッドの使い方

    MongoDBでlimit()を使ってレコードを指定件数だけ取得する方法MongoDBで特定の件数のレコード(ドキュメント)を取得したい場合は、limit()メソッドを使用します。limit()は数値型の引数を1つ受け取り、その引数に指定した数だけドキュメントを表示できます。サンプルコレクションの作成まず、insertOne()メソッドを使って、ドキュメントを含むコレクションを作成します。ここでは「demo549」というコレクションに4件のドキュメントを挿入します。> db.demo549.insertOne({Name:Chris});{ acknowledged : true