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 válido. Expresión siempre que se resuelva como una cadena o un valor binario. Para más información sobre expresiones, consulte Expresiones.

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.

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
{ $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 devuelven 0.

{ $binarySize: "$€λG" }

7

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

{ $binarySize: "寿司" }

6

Cada carácter está codificado 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 projects agregación:

  • 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 projects pipeline:

  • El campo name

  • El imageSize campo, que utiliza para devolver el tamaño del campo del $binarySize documento binary en 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 sorts los documentos por imageSize en 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 limits salida:

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

Tip

Volver

$atanh

En esta página