$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>
が配列の長さより大きい数値の場合。
例 | 結果 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| エラー |
例
この例では、次の 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 } ]