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 cuerda,
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 en cualquier otro tipo de datos, se$binarySize genera un error.
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
imageSizecampo, que utiliza para devolver el tamaño del campo del$binarySizedocumentobinaryen 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 }
Encuentra los datos binarios más grandes
La siguiente canalización devuelve la imagen con el mayor tamaño de datos binarios:
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
imageSizecampo, que utiliza para devolver el tamaño del campo del$binarySizedocumentobinaryen 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 }