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

$strLenBytes (agregação)

Nesta página

  • Definição
  • Comportamento
  • Exemplo
$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.

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
{ $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. λ é 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:

← $strcasecmp (agregação)