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

MongoDBで2つの条件に基づいて数量(Quantity)を更新する方法

はじめに

MongoDBで2つの条件に基づいて数量(Quantity)を更新するには、update()メソッドを使用し、その中に両方の条件を指定します。ドキュメント内の配列要素を対象に更新する場合は、位置演算子「$」を組み合わせることで、条件に一致した配列要素だけを効率的に書き換えられます。

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

まずは、商品情報を持つドキュメントを含むコレクションを作成しましょう。ここでは、各ドキュメントが「Information」という配列フィールドを持ち、その中に複数の商品(idとQuantity)が格納されています。

> db.demo605.insertOne(
...    {
...       _id:1,
...       "Information" : [
...          {
...             "id" : "Product-1",
...             "Quantity" : 50,
...          },
...          {
...             "id" : "Product-2",
...             "Quantity" : 100,
...          },
...       ]
...    }
... );
{ "acknowledged" : true, "insertedId" : 1 }
>
>
> db.demo605.insertOne(
...    {
...       _id:2,
...       "Information" : [
...          {
...             "id" : "Product-1",
...             "Quantity" : 30,
...          },
...          {
...             "id" : "Product-2",
...             "Quantity" : 40,
...          },
...       ]
...    }
... );
{ "acknowledged" : true, "insertedId" : 2 }

登録されたドキュメントの確認

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

> db.demo605.find();

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

{ "_id" : 1, "Information" : [
   { "id" : "Product-1", "Quantity" : 50 },
   { "id" : "Product-2", "Quantity" : 100 }
] }
{ "_id" : 2, "Information" : [
   { "id" : "Product-1", "Quantity" : 30 },
   { "id" : "Product-2", "Quantity" : 40 }
] }

2つの条件に基づいて数量を更新するクエリ

続いて、「_id」と「Information.id」という2つの条件に一致する要素の数量を更新します。配列内の該当要素を指し示すために、位置演算子「$」を使用している点がポイントです。

> db.demo605.update(
...    {_id:1, "Information.id":"Product-1"},
...    {$set:{"Information.$.Quantity":1000}}
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

クエリのポイント解説

  • 第1引数(検索条件){_id:1, "Information.id":"Product-1"} のように、ドキュメントのIDと配列内の商品IDを組み合わせて指定します。
  • 第2引数(更新内容)$set 演算子で更新するフィールドを指定し、"Information.$" の「$」が「条件に一致した配列要素の位置」を表します。
  • 実行結果nMatched: 1 は1件のドキュメントが条件に一致したこと、nModified: 1 は1件が実際に更新されたことを意味します。

なお、MongoDBの新しいバージョンでは update() の代わりに updateOne()updateMany() の使用が推奨されています。基本的な構文はほぼ同じなので、環境に応じて使い分けるとよいでしょう。

更新後のドキュメントを確認する

再度 find() メソッドを実行して、更新結果を確認してみましょう。

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

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

{
   "_id" : 1,
   "Information" : [
      {
         "id" : "Product-1",
         "Quantity" : 1000
      },
      {
         "id" : "Product-2",
         "Quantity" : 100
      }
   ]
}
{
   "_id" : 2,
   "Information" : [
      {
         "id" : "Product-1",
         "Quantity" : 30
      },
      {
         "id" : "Product-2",
         "Quantity" : 40
      }
   ]
}

まとめ

このように、update() メソッドの検索条件に複数のキーを指定し、$set と位置演算子「$」を組み合わせることで、配列内の特定の要素だけをピンポイントで更新できます。_idInformation.id の2つの条件により、「どのドキュメントの」「どの商品の」数量を変更するかを正確に制御できるのが大きなメリットです。在庫管理など、配列形式でデータを保持するシステムでぜひ活用してください。

  1. 【初心者向け】MongoDBで条件付き更新(update)を行う方法を徹底解説

    MongoDBで条件付き更新を行う基本 MongoDBで条件に一致するドキュメントだけを更新したい場合には、update()メソッドを使用します。この記事では、実際のコード例を通して、条件付き更新の基本的な流れをわかりやすく解説します。 1. サンプルコレクションの作成 まずは、ドキュメントを格納するコレクションを作成しましょう。以下ではinsertOne()メソッドを使って、3件のドキュメントを登録しています。 > db.demo402.insertOne({id:101,"Name":"Chris"}); {   &nbs

  2. MongoDBでタグ(配列要素)を更新するクエリの書き方

    MongoDBでタグを更新するには?MongoDBでドキュメント内の配列に格納されたタグを更新するには、updateコマンドと位置演算子「$」を組み合わせて使用します。この記事では、実際にコレクションを作成し、配列内の特定のタグを更新するまでの手順をサンプルコード付きで解説します。1. コレクションの作成まず、insertOne()メソッドを使って、タグ情報を持つドキュメントを含むコレクションを作成します。> db.demo713.insertOne(... {... tags:...     [...    &nbs