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

MongoDBで配列内の要素数をカウントする方法($size演算子の使い方)

MongoDBで配列の要素数を取得するには?

MongoDBで配列フィールドに含まれるアイテム(要素)の数を数えたい場合は、集計フレームワーク(aggregation)の $size 演算子を使用します。$size は、指定した配列に含まれる要素の総数を数値として返してくれる便利な演算子です。

基本構文

$size 演算子を使った基本的な構文は以下のとおりです。

db.yourCollectionName.aggregate({$project:{anyFieldName:{$size:"$yourArrayName"}}}).pretty();

この構文では、$project ステージを使って新しいフィールド(anyFieldName の部分)を作成し、その値として対象の配列(yourArrayName)の要素数を $size で計算しています。

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

実際の動作を確認するために、まずドキュメントを含むコレクションを作成しましょう。以下のクエリで「getSizeOfArray」というコレクションに学生データを挿入します。

> db.getSizeOfArray.insertOne({"StudentId":1,"StudentName":"Larry","StudentMarks":[87,34,56,77,89,90]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c6ebc536fd07954a4890680")
}
> db.getSizeOfArray.insertOne({"StudentId":2,"StudentName":"Sam","StudentMarks":[90,76,56]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c6ebc6b6fd07954a4890681")
}
> db.getSizeOfArray.insertOne({"StudentId":3,"StudentName":"Carol","StudentMarks":[90,76]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c6ebc7a6fd07954a4890682")
}

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

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

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

実行結果は以下のとおりです。各ドキュメントには「StudentMarks」という配列フィールドがあり、それぞれ異なる数の点数が格納されていることがわかります。

{
    "_id" : ObjectId("5c6ebc536fd07954a4890680"),
    "StudentId" : 1,
    "StudentName" : "Larry",
    "StudentMarks" : [
        87,
        34,
        56,
        77,
        89,
        90
    ]
}
{
    "_id" : ObjectId("5c6ebc6b6fd07954a4890681"),
    "StudentId" : 2,
    "StudentName" : "Sam",
    "StudentMarks" : [
        90,
        76,
        56
    ]
}
{
    "_id" : ObjectId("5c6ebc7a6fd07954a4890682"),
    "StudentId" : 3,
    "StudentName" : "Carol",
    "StudentMarks" : [
        90,
        76
    ]
}

$size演算子で配列の要素数をカウントする

それでは、配列内のアイテム数をカウントするクエリを実行してみましょう。「StudentMarks」配列の要素数を「NumberOfItemsInArray」という新しいフィールドとして出力します。

> db.getSizeOfArray.aggregate({$project:{NumberOfItemsInArray:{$size:"$StudentMarks"}}}).pretty();

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

{ "_id" : ObjectId("5c6ebc536fd07954a4890680"), "NumberOfItemsInArray" : 6 }
{ "_id" : ObjectId("5c6ebc6b6fd07954a4890681"), "NumberOfItemsInArray" : 3 }
{ "_id" : ObjectId("5c6ebc7a6fd07954a4890682"), "NumberOfItemsInArray" : 2 }

このように、各ドキュメントごとに配列の要素数が正しく出力されました。Larry のドキュメントでは6個、Sam では3個、Carol では2個という結果になっています。

補足:$size演算子使用時の注意点

  • $size 演算子は引数として配列フィールドのみを受け付けます。配列以外のフィールドを指定するとエラーになります。
  • 配列フィールドが存在しないドキュメントに対して $size を適用するとエラーになるため、必要に応じて $ifNull 演算子などと組み合わせてデフォルト値を設定すると安全です。

以上のように、MongoDBの $size 演算子を使えば、配列内のアイテム数を簡単かつ効率的にカウントできます。データ分析やレポート作成の際にぜひ活用してください。

  1. N回の操作後に配列に残る「1」の個数を数えるアルゴリズム【C言語】

    問題概要サイズNの整数型配列が与えられ、初期状態ではすべての要素が0です。ここで、合計N回の操作を行った後、配列内に「1」がいくつ残っているかを求めるのが課題です。各操作には次のようなルールが定められています。1回目の操作:位置1, 2, 3, 4, … の要素を反転する2回目の操作:位置2, 4, 6, 8, … の要素を反転する3回目の操作:位置3, 6, 9, 12, … の要素を反転するつまり、i回目の操作では「iの倍数の位置にある要素」を反転(0→1、1→0)します。すべての操作を終えた後の配列に含まれる「1」の個数を数えましょう。入力例と出力例入力Arr[] = { 0,0,0,0

  2. C#でリストの要素数を数える方法

    C#でリスト(List<T>)に含まれるアイテムの数を数えるには、Countプロパティを使用します。Countプロパティは、リストに現在格納されている要素の数をint型で返します。 リストを作成する まず、サンプルとして文字列型のリストを作成します。 List<string> myList = new List<string>() { electronics, clothing, appliances, accessories }; 要素数を取得する リストの要素数は、次のようにCountプロパティを参照するだけで取得でき