Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

$binarySize (operador de expresión)

$binarySize

Devuelve el tamaño del contenido de una string o un valor de datos binario dado en bytes.

$binarySize tiene 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.

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.

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
{ $binarySize: "abcde" }

5

Cada carácter se codifica utilizando un byte.

{ $binarySize: "Hello World!" }

12

Cada carácter se codifica utilizando un byte.

{ $binarySize: "cafeteria" }

9

Cada carácter se codifica utilizando un byte.

{ $binarySize: "cafétéria" }

11

é se codifica utilizando dos bytes.

{ $binarySize: "" }

0

Las cadenas vacías retornan 0.

{ $binarySize: "$€λG" }

7

se codifica utilizando tres bytes. λ se codifica utilizando dos bytes.

{ $binarySize: "寿司" }

6

Cada carácter se codifica utilizando tres bytes.

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 imageSize campo, que utiliza para devolver el tamaño del campo del $binarySize documento binary 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 }

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 imageSize campo, que utiliza para devolver el tamaño del campo del $binarySize documento binary 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 sorts los documentos por imageSize en 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 limits los documentos de salida para solo devolver el documento que aparece primero en el orden de clasificación:

{ "_id" : 4, "name" : "concert.jpg", "imageSize" : 269 }

Tip

Volver

$atanh

En esta página