$indexOfBytes(集計)
定義
$indexOfBytes
バージョン 3.4 で追加。
string から部分文字列を検索し、最初に出現した string の UTF- 8バイトインデックス(ゼロベース)を返します。 部分文字列が見つからない場合は、
-1
を返します。$indexOfBytes
には次の演算子式の構文があります。{ $indexOfBytes: [ <string expression>, <substring expression>, <start>, <end> ] } オペランド説明<string expression>
に変換される限り、任意の有効な 式 stringを指定できます。式の詳細については、「式 」を参照してください。
string 式が
null
の値に解決されるか、欠落しているフィールドを参照する場合、$indexOfBytes
はnull
を返します。string 式が string または
null
に解決されず、欠落しているフィールドを参照しない場合は、$indexOfBytes
はエラーを返します。<substring expression>
に変換される限り、任意の有効な 式 stringを指定できます。式の詳細については、「式 」を参照してください。<start>
任意検索の開始インデックス位置を指定する整数。 負でない整数に変換される任意の有効な式を指定できます。<end>
任意検索の終了インデックス位置を指定する整数。 負でない整数に変換される任意の有効な式を指定できます。<end>
インデックス値を指定する場合は、<start>
インデックス値も指定する必要があります。それ以外の場合、$indexOfBytes
は<end>
値ではなく<end>
値を<start>
インデックス値として使用します。
動作
<string expression>
が null の場合、$indexOfBytes
はnull
を返します。ドキュメントに存在しないフィールドで
$indexOfBytes
が呼び出された場合、$indexOfBytes
はnull
を返します。<string expression>
が string ではなく null でない場合、$indexOfBytes
はエラーを返します。<substring expression>
が null の場合、$indexOfBytes
はエラーを返します。<start>
または<end>
が負の数の場合、$indexOfBytes
はエラーを返します。<start>
が<end>
より大きい数値の場合、$indexOfBytes
は-1
を返します。<start>
が string のバイト長よりも大きい数値の場合、$indexOfBytes
は-1
を返します。<start>
または<end>
に整数以外の値が指定されている場合、$indexOfBytes
はエラーを返します。<substring expression>
が<string expression>
内で複数回見つかった場合、$indexOfBytes
は最初に見つかった<substring expression>
のインデックスを返します。
異なる動作を示す短い例をいくつか示します。
例 | 結果 |
---|---|
{ $indexOfBytes: [ "cafeteria", "e" ] } | 3 |
{ $indexOfBytes: [ "cafétéria", "é" ] } | 3 |
{ $indexOfBytes: [ "cafétéria", "e" ] } | -1 |
{ $indexOfBytes: [ "cafétéria", "t" ] } | 5 |
{ $indexOfBytes: [ "foo.bar.fi", ".", 5 ] } | 7 |
{ $indexOfBytes: [ "vanilla", "ll", 0, 2 ] } | -1 |
{ $indexOfBytes: [ "vanilla", "ll", -1 ] } | -1 |
{ $indexOfBytes: [ "vanilla", "ll", 12 ] } | -1 |
{ $indexOfBytes: [ "vanilla", "ll", 5, 2 ] } | -1 |
{ $indexOfBytes: [ "vanilla", "nilla", 3 ] } | -1 |
{ $indexOfBytes: [ null, "foo" ] } | null |
例
以下のドキュメントを持つinventory
コレクションを検討してください。
{ "_id" : 1, "item" : "foo" } { "_id" : 2, "item" : "fóofoo" } { "_id" : 3, "item" : "the foo bar" } { "_id" : 4, "item" : "hello world fóo" } { "_id" : 5, "item" : null } { "_id" : 6, "amount" : 3 }
次の操作では、 $indexOfBytes
演算子を使用して、各アイテム内で string foo
が配置されているインデックスを検索します。
db.inventory.aggregate( [ { $project: { byteLocation: { $indexOfBytes: [ "$item", "foo" ] }, } } ] )
この操作は次の結果を返します。
{ "_id" : 1, "byteLocation" : "0" } { "_id" : 2, "byteLocation" : "4" } { "_id" : 3, "byteLocation" : "4" } { "_id" : 4, "byteLocation" : "-1" } { "_id" : 5, "byteLocation" : null } { "_id" : 6, "byteLocation" : null }