$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. Caracteres com diacríticos e caracteres alfabéticos latinos adicionais (caracteres latinos fora do alfabeto inglês) são codificados usando dois bytes. Caracteres chineses, tailandeses e coreanos normalmente exigem três bytes, e outros planos de unicode (emoji, símbolos matemáticos etc.) exigem quatro 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. λ está 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
.