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

MongoDBで配列の要素数をカウントし、新しいフィールドに表示する方法

ドキュメント内の配列要素の数をカウントするには、MongoDBの $size 演算子を使用します。$size は集計パイプライン(aggregate)の中で利用でき、指定した配列フィールドに含まれる要素の総数を数値として返します。

ここでは、実際にコレクションを作成しながら、配列要素数をカウントして新しいフィールドに表示する手順を解説します。

1. コレクションの作成

まず、ドキュメントを挿入してコレクションを作成します。各ドキュメントには科目名を格納する配列フィールド「ListOfSubject」を持たせます。

> db.demo703.insertOne({"ListOfSubject":["MySQL","MongoDB"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6ebaf551299a9f98c93b4")
}
> db.demo703.insertOne({"ListOfSubject":["Java"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6ebb5551299a9f98c93b5")
}
> db.demo703.insertOne({"ListOfSubject":["C","C++","Python"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6ebbf551299a9f98c93b6")
}

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

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

> db.demo703.find();

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

{ "_id" : ObjectId("5ea6ebaf551299a9f98c93b4"), "ListOfSubject" : [ "MySQL", "MongoDB" ] }
{ "_id" : ObjectId("5ea6ebb5551299a9f98c93b5"), "ListOfSubject" : [ "Java" ] }
{ "_id" : ObjectId("5ea6ebbf551299a9f98c93b6"), "ListOfSubject" : [ "C", "C++", "Python" ] }

それぞれのドキュメントには、2件・1件・3件の科目が配列として格納されていることがわかります。

3. 配列要素数をカウントするクエリ

続いて、$project ステージと $size 演算子を組み合わせた集計クエリを実行し、各配列の要素数を新しいフィールド「NumberOfItemsInEachArray」として出力します。

> db.demo703.aggregate({$project:{NumberOfItemsInEachArray:{$size:"$ListOfSubject"}}}).pretty();

実行結果は以下の通りです。

{
   "_id" : ObjectId("5ea6ebaf551299a9f98c93b4"),
   "NumberOfItemsInEachArray" : 2
}
{
   "_id" : ObjectId("5ea6ebb5551299a9f98c93b5"),
   "NumberOfItemsInEachArray" : 1
}
{
   "_id" : ObjectId("5ea6ebbf551299a9f98c93b6"),
   "NumberOfItemsInEachArray" : 3
}

ポイントまとめ

  • $size は配列フィールド専用の演算子であり、引数には配列型のフィールドを指定する必要があります。
  • $project ステージ内で使用することで、元のドキュメントに存在しない新しいフィールドとしてカウント結果を出力できます。
  • 既存フィールドも残したい場合は、$project 内で ListOfSubject: 1 のように明示的に指定してください。

このように、$size を活用すれば、配列の長さに応じたデータ分析や条件絞り込み($match との組み合わせなど)も簡単に行えます。

  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コマンドを使って複数のレコードを挿入します。ここでは、