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.
The $strLenBytes operator differs from $strLenCP operator which counts the code points
in the specified string regardless of how many bytes each character uses.
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 }
The documents with _id: 3 and _id: 5 each contain a diacritic character (é and ñ respectively) that requires two bytes to encode. The document with _id: 8 contains two Japanese characters that are encoded using three bytes each. This makes the length greater than the number of characters in name for the documents with _id: 3, _id: 5 and _id: 8.