Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

$strLenBytes (agregação)

Nesta página

  • Definição
  • Comportamento
  • Exemplo
$strLenBytes

Novidade na versão 3.4.

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 mais informações sobre expressões, consulte Expressões.

Se o argumento for resolvido para um valor de null ou se referir a um campo ausente, $strLenBytes retornará um erro.

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, 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
{ $strLenBytes: "abcde" }
5
Cada caractere é codificado usando um byte.
{ $strLenBytes: "Hello World!" }
12
Cada caractere é codificado usando um byte.
{ $strLenBytes: "cafeteria" }
9
Cada caractere é codificado usando um byte.
{ $strLenBytes: "cafétéria" }
11
é é codificado usando dois bytes.
{ $strLenBytes: "" }
0
Strings vazias retornam 0.
{ $strLenBytes: "$€λG" }
7
é codificado usando três bytes. λ está codificado usando dois bytes.
{ $strLenBytes: "寿司" }
6
Cada caractere é codificado usando três bytes.

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.

Dica

Veja também:

  • $strLenCP

  • $binarySize

Voltar

$strcasecmp

Próximo

$strLenCP