Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
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 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.

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

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 $binarySize para devolver el tamaño del campo binary del 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 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