Docs Menu
Docs Home
/
MongoDB マニュアル
/ / /

$indexOfArray(集計)

項目一覧

  • 定義
  • 動作
$indexOfArray

配列内で指定された値の出現を検索し、最初に出現した位置の配列インデックスを返します。配列インデックスは 0 から始まります。

$indexOfArrayには次の演算子式の構文があります。

{ $indexOfArray: [ <array expression>, <search expression>, <start>, <end> ] }
フィールド
タイプ
説明
<array>
string

配列に変換される有効なであれば何でも指定できます。式の詳細については、「式演算子」を参照してください。

配列式が 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> のインデックスを返します。

$indexOfArraynull を返します。

  • <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 : 2items 配列にない場合のインデックス。

  • 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 }
]

Tip

以下も参照してください。

戻る

$in

項目一覧