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

MongoDBで配列が特定の要素で始まるレコードを取得するクエリの書き方

MongoDBでは、ドット(.)表記と配列のインデックス(位置番号)を組み合わせることで、配列が特定の要素から始まるレコード(ドキュメント)を簡単に取得できます。たとえば「PlayerScore.0」は配列の先頭(インデックス0)、「PlayerScore.1」は2番目の要素(インデックス1)を指します。

この記事では、実際にサンプルコレクションを作成しながら、その具体的な手順をわかりやすく解説します。

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

まず、insertOne()メソッドを使って、プレイヤーのスコア配列を含むドキュメントを登録します。

> db.arrayStartsWithElementDemo.insertOne({"PlayerName":"Chris","PlayerScore":[780,9000,456,789,987]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd29fed345990cee87fd889")
}
> db.arrayStartsWithElementDemo.insertOne({"PlayerName":"Robert","PlayerScore":[890,670,890,54646,42424]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd2a00c345990cee87fd88a")
}
> db.arrayStartsWithElementDemo.insertOne({"PlayerName":"David","PlayerScore":[909090,896555,3344433,78900]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd2a025345990cee87fd88b")
}

2. 登録したすべてのドキュメントを表示する

find()メソッドを使うと、コレクション内のすべてのドキュメントを確認できます。pretty()を組み合わせると、結果が整形されて読みやすくなります。

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

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

{
    "_id" : ObjectId("5cd29fed345990cee87fd889"),
    "PlayerName" : "Chris",
    "PlayerScore" : [
       780,
       9000,
       456,
       789,
       987
    ]
}
{
    "_id" : ObjectId("5cd2a00c345990cee87fd88a"),
    "PlayerName" : "Robert",
    "PlayerScore" : [
       890,
       670,
       890,
       54646,
       42424
    ]
}
{
    "_id" : ObjectId("5cd2a025345990cee87fd88b"),
    "PlayerName" : "David",
    "PlayerScore" : [
       909090,
       896555,
       3344433,
       78900
    ]
}

3. 配列の先頭が特定の要素であるドキュメントを取得する

ここでは、「配列の先頭が890、かつ2番目が670」という条件でドキュメントを検索します。ドット表記で「PlayerScore.0」と「PlayerScore.1」をそれぞれ指定するのがポイントです。

> db.arrayStartsWithElementDemo.find({"PlayerScore.0" : 890, "PlayerScore.1" : 670}).pretty();

上記のクエリを実行すると、条件に一致したドキュメントだけが次のように出力されます。

{
    "_id" : ObjectId("5cd2a00c345990cee87fd88a"),
    "PlayerName" : "Robert",
    "PlayerScore" : [
       890,
       670,
       890,
       54646,
       42424
    ]
}

ポイントまとめ

  • フィールド名に「.(ドット)+ インデックス番号」を付けることで、配列内の特定の位置にある要素へ直接アクセスできます。
  • 配列のインデックスは0から始まるため、先頭要素は「フィールド名.0」で指定します。
  • 複数のインデックス条件をANDで組み合わせれば、「配列の先頭が特定の順序・値で始まっているドキュメント」だけを正確に絞り込むことが可能です。
  1. MongoDBで配列要素の平均値を取得するクエリの書き方

    MongoDBで配列内の数値の平均を求める方法MongoDBでは、配列に格納された複数の数値から平均値を算出したいケースがよくあります。例えば、1つのドキュメントの中に複数の点数(Marks)が配列として保存されている場合、その平均点を取得したいことがあります。このような場合、集計パイプライン(aggregation)と$avg演算子を組み合わせることで、簡単に平均値を求めることができます。$avgは、指定したフィールド(配列の場合はその全要素)の数値の平均を自動的に計算してくれる便利な演算子です。以下、具体的な手順を見ていきましょう。1. コレクションを作成し、ドキュメントを挿入するまず、i

  2. MongoDBで特定フィールドの配列要素数を取得する方法($size演算子の使い方)

    MongoDBでドキュメント内の特定フィールド(配列)に含まれる要素の数をカウントしたい場合は、集計パイプライン(aggregate)と$size演算子を組み合わせるのが最も簡単な方法です。この記事では、実際のコレクションを作成しながら、配列要素数を取得する具体的な手順を解説します。1. サンプルコレクションの作成まず、配列型のフィールド「Subject」を持つドキュメントを含むコレクションを作成します。> db.demo723.insertOne({Subject:[MySQL,MongoDB]}); { acknowledged : true, insertedId