$strLenBytes (agregação)
Nesta página
Definição
$strLenBytes
Retorna o número de bytes codificados UTF-8 na string especificada.
$strLenBytes
tem a seguintesintaxe de expressão do operador :{ $strLenBytes: <string expression> } O argumento pode ser qualquer expressão válida, desde que produza uma string. Para obter mais informações sobre expressões, consulte Operadores de Expressão.
Se o argumento for resolvido para um valor de
null
ou se referir a um campo ausente,$strLenBytes
retornará um erro.
Comportamento
O operador $strLenBytes
conta o número de bytes codificados UTF-8 em uma string onde cada caractere pode usar entre um e quatro bytes.
Por exemplo, os caracteres US-ASCII são codificados usando um byte. Characters with diacritic markings and additional Latin alphabetical characters (i.e. Caracteres latinos fora do alfabeto inglês) são codificados usando dois bytes. Chinese, Japanese and Korean characters typically require three bytes, and other planes of unicode (emoji, mathematical symbols, etc.) require four bytes.
O operador $strLenBytes
é diferente do operador ,$strLenCP
que conta os pontos de código na string especificada, independentemente de quantos bytes cada caractere usa.
Exemplo | Resultados | Notas | |
---|---|---|---|
| 5 | Cada caractere é codificado usando um byte. | |
| 12 | Cada caractere é codificado usando um byte. | |
| 9 | Cada caractere é codificado usando um byte. | |
| 11 | é é codificado usando dois bytes. | |
| 0 | Strings vazias retornam 0. | |
| 7 | € é codificado usando três bytes. λ é codificado usando dois bytes. | |
| 6 | Cada caractere é codificado usando três bytes. |
Exemplo
Conjunto de caracteres de byte único e multibyte
Criar uma coleção food
com os seguintes documentos:
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" : "寿司" } ] )
A seguinte operação utiliza o operador $strLenBytes
para calcular length
de cada valor name
:
db.food.aggregate( [ { $project: { "name": 1, "length": { $strLenBytes: "$name" } } } ] )
A operação retorna os seguintes resultados:
{ "_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 }
Os documentos com _id: 3
e _id: 5
contêm um caractere diacrítico (é
e ñ
, respectivamente) que requer dois bytes para codificar. O documento com _id: 8
contém dois caracteres tailandeses que são codificados usando três bytes cada. Isso torna o length
maior que o número de caracteres em name
para os documentos com _id: 3
, _id: 5
e _id: 8
.