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 が返される仕様を理解しておくと、条件分岐やデータ検証の処理にも活用できます。
-
Pythonでリストの最後から2番目の要素を取得する方法
Pythonでリストの最後から2番目の要素を取得するには?Pythonでは、リストをはじめとするシーケンス型オブジェクトに対して、インデックス(添字)を使って各要素にアクセスできます。通常は0から始まるインデックスで要素を参照しますが、負の数を指定した場合は、リストの末尾から数えた位置として解釈されるのが特徴です。したがって、リストの最後から2番目の要素を取得したい場合は、インデックスとして -2 を指定します。>>> L1 = [1, 2, 3, 4, 5]>>> print(L1[-2])4この例では、リスト L1 の末尾から数えて2番目の要素である「4
-
Pythonでリストの最後の要素を取得する方法【初心者向け】
Pythonでリストの最後の要素を取得する基本方法 Pythonでは、リストをはじめとするシーケンス型オブジェクトに対して、インデックス(添字)を使って任意の要素にアクセスできます。インデックスは0から始まるため、最初の要素は「0」、2番目の要素は「1」というように指定します。 ここで重要になるのが負のインデックスです。負の数を指定すると、リストの末尾から逆順に数えて要素を取得できます。したがって、リストの最後の要素を取得したい場合は、インデックスとして -1 を指定するだけでOKです。 >>> L1 = [1, 2, 3, 4, 5] >>> print(