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

MongoDBで$addFieldsを使って新しいフィールドを作成し、配列の要素数をカウントして設定する方法

MongoDBでドキュメントに新しいフィールドを追加するには、集計パイプラインの$addFieldsステージを使用します。$addFieldsは、既存のドキュメントに新しいフィールドを追加したり、既存フィールドの値を置き換えたりできる便利な演算子です。さらに$map$sizeを組み合わせることで、ネストされた配列内の各要素に対して、別の配列フィールドの要素数をカウントした値を持つ新しいフィールドを追加できます。

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

まず、insertOne()メソッドを使ってドキュメントを含むコレクションを作成します。

> db.demo429.insertOne(
...    {
...       "_id": 101,
...       "Value": 3,
...       "details": [
...          {
...             "Age": 29,
...             "Value": 3,
...             "details1": [
...                1,
...                2,
...                3
...             ]
...          },
...          {
...             "Age": 31,
...             "Value": 4,
...             "details1": [
...                354
...             ]
...          }
...       ]
...    }
... );
{ "acknowledged" : true, "insertedId" : 101 }

登録済みドキュメントの確認

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

> db.demo429.find();

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

{ "_id" : 101, "Value" : 3, "details" : [ { "Age" : 29, "Value" : 3, "details1" : [ 1, 2, 3 ] }, { "Age" : 31, "Value" : 4, "details1" : [ 354 ] } ] }

$addFieldsで新しいフィールドを作成し、配列の要素数を設定する

以下は、$mapと$sizeを組み合わせて、details配列の各要素に「details1の要素数」を表す新しいフィールドNumberOfDetails1を追加するクエリです。

> db.demo429.aggregate([
...    {
...       "$addFields": {
...          "details" : {
...             "$map": {
...                "input": "$details",
...                "as": "d",
...                "in": {
...                   "Age" : "$$d.Age",
...                   "NumberOfDetails1": { "$size": "$$d.details1" }
...                }
...             }
...          }
...       }
...    }
... ])

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

{ "_id" : 101, "Value" : 3, "details" : [ { "Age" : 29, "NumberOfDetails1" : 3 }, { "Age" : 31, "NumberOfDetails1" : 1 } ] }

ポイント解説

  • $addFields:ドキュメントに新しいフィールドを追加するステージです。元のコレクション自体は変更されず、クエリの出力結果にのみ反映されます。
  • $map:配列の各要素に対して処理を適用し、新しい配列を返します。「as」で指定した変数名(ここでは「d」)を使って各要素にアクセスできます。
  • $size:配列の要素数を返します。これにより、details1配列の長さを自動的にカウントできます。

なお、$mapの「in」内で明示的に指定しなかったフィールド(例:元の「Value」)は出力から除外される点に注意してください。すべてのフィールドを出力に残したい場合は、「in」の中に必要なフィールドを漏れなく記述しましょう。

  1. 【MongoDB】$addFieldsで新しいフィールドを追加し、価格を特定の数値で割った結果を連結する方法

    MongoDBで既存のドキュメントに新しいフィールドを追加するには、集計パイプラインの$addFieldsステージを使用します。本記事では、ネストされた配列内の商品価格(ProductPrice)を特定の数値で割り、その結果を文字列として連結して新しいフィールドに格納する方法を、サンプルコードとともに解説します。 サンプルコレクションの作成 まず、insertOne()メソッドを使用して、ドキュメントを含むコレクションを作成します。 > db.demo719.insertOne( ... { ... Number:7374644, ... de

  2. MySQLで名前ごとにグループ化し、カウント結果を新しい列に表示する方法

    MySQLでは、GROUP BY句とCOUNT()関数を組み合わせることで、同じ値を持つレコードをまとめて集計できます。この記事では、名前の列をグループ化し、各名前の出現回数を新しい列として表示するクエリの書き方を、具体的な手順とともに解説します。 サンプルテーブルの作成 まず、デモ用のテーブルを作成しましょう。 mysql> create table DemoTable ( Name varchar(30) ); Query OK, 0 rows affected (0.63 sec) レコードの挿入 次に、INSERTコマンドを使って複数のレコードを挿入します。ここでは、