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 válido. Expresión siempre que se resuelva como una cadena o un valor binario. Para más información sobre expresiones, consulte Expresiones.
Comportamiento
El argumento para debe resolverse $binarySize en:
Una cuerda,
Un valor de datos binarios, o
nulo.
Si el argumento es una cadena 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 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.
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 devuelven 0. | |
|
|
| |
|
| Cada carácter está codificado 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 projects agregación:
El campo
nameEl
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
projectspipeline:El campo
nameEl
imageSizecampo, que utiliza para devolver el tamaño del campo del$binarySizedocumentobinaryen bytes.
Esta etapa envía los siguientes documentos a 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 envía los siguientes documentos a 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 devuelve únicamente el documento que aparece primero en el orden de clasificación de los documentos de
limitssalida:{ "_id" : 4, "name" : "concert.jpg", "imageSize" : 269 }