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

MongoDBで配列要素のインデックスを取得する方法:$indexOfArray演算子の使い方

MongoDBで配列要素のインデックスを取得するには?

配列内の特定要素がどの位置(インデックス)にあるかを調べたい場合、MongoDBの集計パイプラインで使える $indexOfArray 演算子を利用します。この演算子は、指定した値が配列の中で最初に現れる位置を返し、見つからない場合は -1 を返します。

ここでは、サンプルコレクションを作成しながら、実際の使い方を順番に見ていきましょう。

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

まず、insertOne() メソッドを使って、数値の配列を持つドキュメントをいくつか挿入します。

> db.demo65.insertOne({"ListOfValues":[10,20,30]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e28990ecfb11e5c34d89938")
}
> db.demo65.insertOne({"ListOfValues":[50,60,70,100]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e28991ecfb11e5c34d89939")
}
> db.demo65.insertOne({"ListOfValues":[30,40,89,91,98]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e28992bcfb11e5c34d8993a")
}

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

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

> db.demo65.find();

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

{ "_id" : ObjectId("5e28990ecfb11e5c34d89938"), "ListOfValues" : [ 10, 20, 30 ] }
{ "_id" : ObjectId("5e28991ecfb11e5c34d89939"), "ListOfValues" : [ 50, 60, 70, 100 ] }
{ "_id" : ObjectId("5e28992bcfb11e5c34d8993a"), "ListOfValues" : [ 30, 40, 89, 91, 98 ] }

3. $indexOfArray を使った集計クエリ

次に、aggregate() の中で $project ステージと組み合わせて $indexOfArray を使用し、配列 ListOfValues 内の値「30」のインデックスを取得してみます。

> db.demo65.aggregate(
...    [
...       {
...          $project:
...          {
...            IndexOfAnArrayElement: { $indexOfArray: [ "$ListOfValues", 30] },
...          }
...       }
...    ]
... );

4. 実行結果

上記のクエリを実行すると、以下のような結果が出力されます。

{ "_id" : ObjectId("5e28990ecfb11e5c34d89938"), "IndexOfAnArrayElement" : 2 }
{ "_id" : ObjectId("5e28991ecfb11e5c34d89939"), "IndexOfAnArrayElement" : -1 }
{ "_id" : ObjectId("5e28992bcfb11e5c34d8993a"), "IndexOfAnArrayElement" : 0 }

結果の解説

  • 1件目のドキュメント: 配列は [10, 20, 30] なので、「30」はインデックス 2(3番目の要素)に存在します。
  • 2件目のドキュメント: 配列は [50, 60, 70, 100] で、「30」は含まれていないため -1 が返されます。
  • 3件目のドキュメント: 配列は [30, 40, 89, 91, 98] なので、「30」は先頭にあり、インデックス 0 が返されます。

このように、$indexOfArray 演算子を使えば、配列内の任意の要素の位置を簡単に特定できます。要素が見つからない場合に -1 が返される仕様を理解しておくと、条件分岐やデータ検証の処理にも活用できます。

  1. Pythonでリストの最後から2番目の要素を取得する方法

    Pythonでリストの最後から2番目の要素を取得するには?Pythonでは、リストをはじめとするシーケンス型オブジェクトに対して、インデックス(添字)を使って各要素にアクセスできます。通常は0から始まるインデックスで要素を参照しますが、負の数を指定した場合は、リストの末尾から数えた位置として解釈されるのが特徴です。したがって、リストの最後から2番目の要素を取得したい場合は、インデックスとして -2 を指定します。>>> L1 = [1, 2, 3, 4, 5]>>> print(L1[-2])4この例では、リスト L1 の末尾から数えて2番目の要素である「4

  2. Pythonでリストの最後の要素を取得する方法【初心者向け】

    Pythonでリストの最後の要素を取得する基本方法 Pythonでは、リストをはじめとするシーケンス型オブジェクトに対して、インデックス(添字)を使って任意の要素にアクセスできます。インデックスは0から始まるため、最初の要素は「0」、2番目の要素は「1」というように指定します。 ここで重要になるのが負のインデックスです。負の数を指定すると、リストの末尾から逆順に数えて要素を取得できます。したがって、リストの最後の要素を取得したい場合は、インデックスとして -1 を指定するだけでOKです。 >>> L1 = [1, 2, 3, 4, 5] >>> print(