$strLenBytes(集計)
定義
$strLenBytes
バージョン 3.4 で追加。
指定された string 内の UTF-8 でエンコードされたバイト数を返します。
$strLenBytes
には次の演算子式の構文があります。{ $strLenBytes: <string expression> } 引数は、string に変換される限り、どのような有効な式でも使用できます。 式の詳細については、「式 」を参照してください。
引数が
null
値に解決されるか、欠落しているフィールドを参照する場合、$strLenBytes
はエラーを返します。
動作
$strLenBytes
演算子は、各文字が 1 バイトから 4 バイトの間を使用できる string 内の UTF- 8でエンコードされたバイト数をカウントします。
たとえば、US-ASCII 文字は 1 バイトを使用してエンコードされます。 発音区別符号を持つ文字と追加のラテン文字(アルファベットの外のラテン文字)を持つ文字は、2 バイトを使用してエンコードされます。 中国語、日本語、 韓国語の文字は通常 3 バイト必要であり、Unicode の他のプレーン(文字列、数学記号など)には 4 バイトが必要です。
$strLenBytes
演算子は、$strLenCP
コード ポイント をカウントするstring 演算子とは異なります。 各文字が使用するバイト数に関係なく、指定された 内で 。
例 | 結果 | ノート | |
---|---|---|---|
|
| 各文字は 1 バイトを使用してエンコードされます。 | |
|
| 各文字は 1 バイトを使用してエンコードされます。 | |
|
| 各文字は 1 バイトを使用してエンコードされます。 | |
|
|
| |
|
| 空の文字列は 0 を返します。 | |
|
|
| |
|
| 各文字は 3 バイトを使用してエンコードされます。 |
例
シングルバイトおよびマルチバイト文字セット
次のドキュメントを使用して food
コレクションを作成します。
db.food.insertMany( [ { "_id" : 1, "name" : "apple" }, { "_id" : 2, "name" : "banana" }, { "_id" : 3, "name" : "éclair" }, { "_id" : 4, "name" : "hamburger" }, { "_id" : 5, "name" : "jalapeño" }, { "_id" : 6, "name" : "pizza" }, { "_id" : 7, "name" : "tacos" }, { "_id" : 8, "name" : "寿司" } ] )
次の操作では、 $strLenBytes
演算子を使用して、各name
値のlength
を計算します。
db.food.aggregate( [ { $project: { "name": 1, "length": { $strLenBytes: "$name" } } } ] )
この操作は次の結果を返します。
{ "_id" : 1, "name" : "apple", "length" : 5 } { "_id" : 2, "name" : "banana", "length" : 6 } { "_id" : 3, "name" : "éclair", "length" : 7 } { "_id" : 4, "name" : "hamburger", "length" : 9 } { "_id" : 5, "name" : "jalapeño", "length" : 9 } { "_id" : 6, "name" : "pizza", "length" : 5 } { "_id" : 7, "name" : "tacos", "length" : 5 } { "_id" : 8, "name" : "寿司", "length" : 6 }
_id: 3
と_id: 5
を含むドキュメントにはそれぞれ、エンコードに 2 バイトが必要な発音区別文字(それぞれé
とñ
)が含まれています。 _id: 8
を含むドキュメントには、それぞれ 3 バイトを使用してエンコードされた 2 つの日本語の文字が含まれています。 これにより、 _id: 3
、 _id: 5
、 _id: 8
を含むドキュメントのname
の文字数よりもlength
が大きくなります。