定義
$strLenBytes指定された string 内の UTF-8 でエンコードされたバイト数を返します。
$strLenBytesには次の演算子式の構文があります。{ $strLenBytes: <string expression> } 引数は、string に変換される限り、どのような有効な式でも使用できます。 式の詳細については、「式 」を参照してください。
引数が
null値に解決されるか、欠落しているフィールドを参照する場合、$strLenBytesはエラーを返します。
動作
$strLenBytes演算子は、各文字が 1 バイトから 4 バイトの間を使用できる string 内の UTF- 8でエンコードされたバイト数をカウントします。
たとえば、US-ASCII 文字は 1 バイトを使用してエンコードされます。 発音区別符号を持つ文字と追加のラテン文字(アルファベットの外のラテン文字)を持つ文字は、2 バイトを使用してエンコードされます。 中国語、日本語、 韓国語の文字は通常 3 バイト必要であり、Unicode の他のプレーン(文字列、数学記号など)には 4 バイトが必要です。
演算子は、各文字が使用するバイト数に関係なく、指定された $strLenBytes$strLenCPstring 内の コード ポイント をカウントする 演算子とは異なります。
例 | 結果 | ノート | |
|---|---|---|---|
|
| 各文字は 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が大きくなります。