Definición
$strLenBytesDevuelve la cantidad 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 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 | |
|---|---|---|---|
|
| 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 devuelven 0. | |
|
|
| |
|
| Cada carácter está codificado utilizando tres bytes. |
Ejemplo
Conjunto de caracteres de un solo byte y multibyte
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.