定義
$indexOfArrayバージョン 3.4 で追加。
配列内で指定された値の出現を検索し、最初に出現した位置の配列インデックス(ゼロから始まる)を返します。 値が見つからない場合は、
-1が返されます。$indexOfArrayには次の演算子式の構文があります。{ $indexOfArray: [ <array expression>, <search expression>, <start>, <end> ] } フィールドタイプ説明<array>配列
配列に変換される有効な式であれば何でも指定できます。 式の詳細については、「式 」を参照してください。
配列式が の値に解決されるか、欠落しているフィールドを参照する場合、
null$indexOfArraynullは を返します。配列式が配列または
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>が配列の長さより大きい数値の場合。
例 | 結果 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| エラー |
例
この例では、次の 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 } ]