$indexOfArray(集計)
定義
$indexOfArray
配列内で指定された値の出現を検索し、最初に出現した位置の配列インデックスを返します。配列インデックスは 0 から始まります。
$indexOfArray
には次の演算子式の構文があります。{ $indexOfArray: [ <array expression>, <search expression>, <start>, <end> ] } フィールドタイプ説明<array>
配列配列に変換される有効な式であれば何でも指定できます。式の詳細については、「式演算子」を参照してください。
配列式が
null
の値に解決されるか、欠落しているフィールドを参照する場合、$indexOfArray
はnull
を返します。配列式が配列または
null
に解決されず、欠落しているフィールドを参照しない場合は、$indexOfArray
はエラーを返します。<search value>
string<start>
integer任意。検索の開始インデックス位置を指定する整数、または整数で表せる数値(2.0など)。負でない整数に変換される任意の有効な式を指定できます。
指定しない場合、検索の開始インデックス位置は文字列の先頭になります。
<end>
integer任意。 検索の終了インデックス位置を指定する整数、または整数で表せる数値( 2.0など)。 負でない整数に変換される任意の有効な式を指定できます。
<end>
インデックス値を指定する場合は、<start>
インデックス値も指定する必要があります。それ以外の場合、$indexOfArray
は<end>
値ではなく<start>
インデックス値として<end>
値を使用します。指定しない場合、検索の終了インデックス位置は文字列の末尾になります。
動作
<search expression>
が <array expression>
内で複数回見つかった場合、$indexOfArray
は開始インデックス位置から見て最初の <search expression>
のインデックスを返します。
$indexOfArray
はnull
を返します。
<array expression>
が null の場合、または<array expression>
が入力ドキュメント内の存在しないフィールドを参照している場合。
$indexOfArray
は以下の場合エラーを返します。
<array expression>
が配列ではなく、nullでない場合、または<start>
または<end>
が負の整数(または -5.0 のように負の整数として表せる値)の場合。
$indexOfArray
は-1
を返します。
<search expression> が配列内に見つからない場合、または
<start>
が<end>
より大きい数値の場合、または<start>
が配列の長さより大きい数値の場合。
例 | 結果 |
---|---|
{ $indexOfArray: [ [ "a", "abc" ], "a" ] } | 0 |
{ $indexOfArray: [ [ "a", "abc", "de", ["de"] ], ["de"] ] } | 3 |
{ $indexOfArray: [ [ 1, 2 ], 5 ] } | -1 |
{ $indexOfArray: [ [ 1, 2, 3 ], [1, 2] ] } | -1 |
{ $indexOfArray: [ [ 10, 9, 9, 8, 9 ], 9, 3 ] } | 4 |
{ $indexOfArray: [ [ "a", "abc", "b" ], "b", 0, 1 ] } | -1 |
{ $indexOfArray: [ [ "a", "abc", "b" ], "b", 1, 0 ] } | -1 |
{ $indexOfArray: [ [ "a", "abc", "b" ], "b", 20 ] } | -1 |
{ $indexOfArray: [ [ null, null, null ], null ] } | 0 |
{ $indexOfArray: [ null, "foo" ] } | null |
{ $indexOfArray: [ "foo", "foo" ] } | エラー |
例
この例では、次の inventory
コレクションを使用します。
db.inventory.insertMany( [ { _id: 0, items: [ "one", "two", "three" ] }, { _id: 1, items: [ 1, 2, 3 ] }, { _id: 2, items: [ 1, 2, 3, 2 ] }, { _id: 3, items: [ null, null, 2 ] }, { _id: 4, items: [ 2, null, null, 2 ] }, { _id: 5, items: null }, { _id: 6, amount: 3 } ] )
次の例では、 $indexOfArray
を使用してitems
配列から2
を検索します。
db.inventory.aggregate( [ { $project: { index: { $indexOfArray: [ "$items", 2 ] } } } ] )
この例では次の結果が返されます。
各
items
配列内の値2
の最初の配列インデックス(見つかった場合)。配列インデックスは0
から始まります。-1
:2
がitems
配列にない場合のインデックス。null
:items
が配列でないか、items
が存在しない場合のインデックス。
出力例:
[ { _id: 0, index: -1 }, { _id: 1, index: 1 }, { _id: 2, index: 1 }, { _id: 3, index: 2 }, { _id: 4, index: 0 }, { _id: 5, index: null }, { _id: 6, index: null } ]