Docs Menu
Docs Home
/ /
Operadores de tuberías de agregación

$strLenBytes (agregación)

$strLenBytes

Devuelve la cantidad de bytes codificados en UTF-8 en la cadena especificada.

$strLenBytes tiene lo siguiente Sintaxis de expresión del operador:

{ $strLenBytes: <string expression> }

El argumento puede ser cualquier expresión válida siempre que se resuelva en una cadena. Para más información sobre expresiones, consulte Expresiones.

Si el argumento se resuelve en un valor de null o hace referencia a un campo faltante, devuelve un$strLenBytes error.

El operador cuenta la cantidad $strLenBytes de8 bytes codificados en UTF- en una cadena donde cada carácter puede usar entre uno y cuatro bytes.

Por ejemplo, los caracteres US-ASCII se codifican con un byte. Los caracteres con marcas diacríticas y caracteres alfabéticos latinos adicionales (caracteres latinos fuera del alfabeto inglés) se codifican con dos bytes. Los caracteres chinos, japoneses y coreanos suelen requerir tres bytes, y otros planos de Unicode (emojis, símbolos matemáticos, etc.) requieren cuatro bytes.

El operador$strLenBytesse diferencia del operador$strLenCP, que cuenta los puntos de código en la cadena especificada independientemente de cuántos bytes utilice cada carácter.

Ejemplo
Resultados
notas
{ $strLenBytes: "abcde" }

5

Cada carácter se codifica utilizando un byte.

{ $strLenBytes: "Hello World!" }

12

Cada carácter se codifica utilizando un byte.

{ $strLenBytes: "cafeteria" }

9

Cada carácter se codifica utilizando un byte.

{ $strLenBytes: "cafétéria" }

11

é se codifica utilizando dos bytes.

{ $strLenBytes: "" }

0

Las cadenas vacías devuelven 0.

{ $strLenBytes: "$€λG" }

7

se codifica utilizando tres bytes. λ se codifica utilizando dos bytes.

{ $strLenBytes: "寿司" }

6

Cada carácter está codificado utilizando tres bytes.

Crea una colección food con los siguientes 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" : "寿司" }
]
)

La siguiente operación utiliza el operador $strLenBytes para calcular el length de cada valor name:

db.food.aggregate(
[
{
$project: {
"name": 1,
"length": { $strLenBytes: "$name" }
}
}
]
)

La operación devuelve los siguientes 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 }

Los documentos con _id: 3 y _id: 5 contienen un carácter diacrítico (é y ñ respectivamente) que requiere dos bytes para su codificación. El documento con _id: 8 contiene dos caracteres japoneses codificados con tres bytes cada uno. Esto hace que length tenga más caracteres que name en los documentos con _id: 3, _id: 5 y _id: 8.

Tip

  • $strLenCP

  • $binarySize

Volver

$strcasecmp

En esta página