Definición
$binarySizeDevuelve el tamaño del contenido de una string o un valor de datos binario dado en bytes.
$binarySizetiene la siguiente sintaxis:{ $binarySize: <string or binData> } El argumento puede ser cualquier expresión siempre que se resuelva a un valor de datos de string o binarios. Para obtener más información sobre expresiones, consulta Expresiones.
Comportamiento
El argumento para $binarySize debe resolverse en uno de los siguientes:
Una string,
Un valor de datos binarios, o
nulo.
Si el argumento es un string o un valor de datos binarios, la expresión devuelve el tamaño del argumento en bytes.
Si el argumento es null, la expresión devuelve null.
Si el argumento se resuelve a cualquier otro tipo de dato, $binarySize errores.
Cálculo del tamaño de la String
Si el argumento para $binarySize es una string, el operador cuenta el número de bytes codificados en UTF-8 en una 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.
Considere los siguientes ejemplos:
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
En mongosh, cree una colección de muestra llamada images con los siguientes documentos:
db.images.insertMany([ { _id: 1, name: "cat.jpg", binary: new BinData(0, "OEJTfmD8twzaj/LPKLIVkA==")}, { _id: 2, name: "big_ben.jpg", binary: new BinData(0, "aGVsZmRqYWZqYmxhaGJsYXJnYWZkYXJlcTU1NDE1Z2FmZCBmZGFmZGE=")}, { _id: 3, name: "tea_set.jpg", binary: new BinData(0, "MyIRAFVEd2aImaq7zN3u/w==")}, { _id: 4, name: "concert.jpg", binary: new BinData(0, "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=")}, { _id: 5, name: "empty.jpg", binary: new BinData(0, "") } ])
La siguiente agregación projects:
El campo
name.El campo
imageSize, que usa$binarySizepara devolver el tamaño del campobinarydel documento en bytes.
db.images.aggregate([ { $project: { "name": "$name", "imageSize": { $binarySize: "$binary" } } } ])
La operación devuelve el siguiente resultado:
{ "_id" : 1, "name" : "cat.jpg", "imageSize" : 16 } { "_id" : 2, "name" : "big_ben.jpg", "imageSize" : 41 } { "_id" : 3, "name" : "teaset.jpg", "imageSize" : 16 } { "_id" : 4, "name" : "concert.jpg", "imageSize" : 269 } { "_id" : 5, "name" : "empty.jpg", "imageSize" : 0 }
Encontrar los datos binarios más grandes
El siguiente pipeline devuelve la imagen con el tamaño de datos binarios más grande:
db.images.aggregate([ // First Stage { $project: { name: "$name", imageSize: { $binarySize: "$binary" } } }, // Second Stage { $sort: { "imageSize" : -1 } }, // Third Stage { $limit: 1 } ])
- Primera etapa
La primera etapa del pipeline
projects:El campo
name.El campo
imageSize, que usa$binarySizepara devolver el tamaño del campobinarydel documento en bytes.
Esta etapa produce los siguientes documentos para la siguiente etapa:
{ "_id" : 1, "name" : "cat.jpg", "imageSize" : 16 } { "_id" : 2, "name" : "big_ben.jpg", "imageSize" : 41 } { "_id" : 3, "name" : "teaset.jpg", "imageSize" : 16 } { "_id" : 4, "name" : "concert.jpg", "imageSize" : 269 } { "_id" : 5, "name" : "empty.jpg", "imageSize" : 0 } - Segunda etapa
La segunda etapa
sortslos documentos porimageSizeen orden descendente.Esta etapa produce los siguientes documentos para la siguiente etapa:
{ "_id" : 4, "name" : "concert.jpg", "imageSize" : 269 } { "_id" : 2, "name" : "big_ben.jpg", "imageSize" : 41 } { "_id" : 1, "name" : "cat.jpg", "imageSize" : 16 } { "_id" : 3, "name" : "teaset.jpg", "imageSize" : 16 } { "_id" : 5, "name" : "empty.jpg", "imageSize" : 0 } - Tercera etapa
La tercera etapa
limitslos documentos de salida para solo devolver el documento que aparece primero en el orden de clasificación:{ "_id" : 4, "name" : "concert.jpg", "imageSize" : 269 }