Definición
$strLenBytesDevuelve el número de bytes codificados en UTF-8 en la cadena especificada.
$strLenBytestiene 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
nullo hace referencia a un campo faltante, devuelve un$strLenByteserror.
Comportamiento
El operador $strLenBytes cuenta el número de bytes codificados en UTF-8 en un string, donde cada carácter puede usar entre uno y cuatro bytes.
Por ejemplo, los caracteres US-ASCII se codifican usando un byte. Los caracteres con marcas diacríticas y caracteres alfabéticos latinos adicionales (caracteres latinos fuera del alfabeto inglés) se codifican utilizando dos bytes. Los caracteres chinos, japoneses y coreanos generalmente requieren tres bytes, mientras que otros planos de Unicode (emojis, símbolos matemáticos, etc.) requieren cuatro bytes.
El $strLenBytes operador difiere del $strLenCP operador que cuenta los puntos de código
en la cadena especificada, independientemente de cuántos bytes utilice cada carácter.
Ejemplo | Resultados | notas | |
|---|---|---|---|
|
| Cada carácter se codifica utilizando un byte. | |
|
| Cada carácter se codifica utilizando un byte. | |
|
| Cada carácter se codifica utilizando un byte. | |
|
|
| |
|
| Las cadenas vacías retornan 0. | |
|
|
| |
|
| Cada carácter se codifica utilizando tres bytes. |
Ejemplo
Juego de caracteres de un solo byte y de varios 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 cada uno un carácter diacrítico (é y ñ respectivamente) que requiere dos bytes para codificarse. El documento con _id: 8 contiene dos caracteres japoneses que se codifican utilizando tres bytes cada uno. Esto hace que la length sea mayor que el número de caracteres en name para los documentos con _id: 3, _id: 5 y _id: 8.