Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

$binarySize (agregação)

Nesta página

  • Definição
  • Comportamento
  • Exemplo
$binarySize

Retorna o tamanho de uma determinada string ou o conteúdo do valor dos dados binários em bytes.

$binarySize tem a seguinte sintaxe:

{ $binarySize: <string or binData> }

O argumento pode ser qualquerexpressão válida, desde que resolva para um valor de string ou de dados binários. Para obter mais informações sobre expressões, consulte Operadores de expressão.

O argumento para $binarySize deve resultar em:

  • Uma string,

  • Um valor de dados binários, ou

  • nulo.

Se o argumento for uma string ou valor de dados binário, a expressão retornará o tamanho do argumento em bytes.

Se o argumento for null, a expressão retornará null.

Se o argumento for resolvido para qualquer outro tipo de dados, ocorrerão $binarySize erros.

Se o argumento para $binarySize for uma string, o operador conta o número de bytes codificados em UTF-8 em uma string onde cada caractere pode usar entre um e quatro bytes.

Por exemplo, os caracteres US-ASCII são codificados usando um byte. Caracteres com diacríticos e caracteres alfabéticos latinos adicionais (caracteres latinos fora do alfabeto inglês) são codificados usando dois bytes. Caracteres chineses, tailandeses e coreanos normalmente exigem três bytes, e outros planos de unicode (emoji, símbolos matemáticos etc.) exigem quatro bytes.

Considere os seguintes exemplos:

Exemplo
Resultados
Notas
{ $binarySize: "abcde" }
5
Cada caractere é codificado usando um byte.
{ $binarySize: "Hello World!" }
12
Cada caractere é codificado usando um byte.
{ $binarySize: "cafeteria" }
9
Cada caractere é codificado usando um byte.
{ $binarySize: "cafétéria" }
11
é é codificado usando dois bytes.
{ $binarySize: "" }
0
Strings vazias retornam 0.
{ $binarySize: "$€λG" }
7
é codificado usando três bytes. λ está codificado usando dois bytes.
{ $binarySize: "寿司" }
6
Cada caractere é codificado usando três bytes.

No mongosh, crie uma coleção de amostra denominada images com os seguintes 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, "") }
])

A seguinte aggregation projects:

  • O campo name

  • O campo imageSize, que utiliza $binarySize para retornar o tamanho do campo binary do documento em bytes.

db.images.aggregate([
{
$project: {
"name": "$name",
"imageSize": { $binarySize: "$binary" }
}
}
])

A operação retorna o seguinte 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 }

O pipeline a seguir retorna a imagem com o maior tamanho de dados binários:

db.images.aggregate([
// First Stage
{ $project: { name: "$name", imageSize: { $binarySize: "$binary" } } },
// Second Stage
{ $sort: { "imageSize" : -1 } },
// Third Stage
{ $limit: 1 }
])
Primeira etapa

O primeiro estágio do pipeline projects :

  • O campo name

  • O campo imageSize, que utiliza $binarySize para retornar o tamanho do campo binary do documento em bytes.

Este estágio produz os seguintes documentos para o próximo estágio:

{ "_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

O segundo estágio sorts os documentos por imageSize em ordem decrescente.

Este estágio produz os seguintes documentos para o próximo estágio:

{ "_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 }
Terceiro estágio

O terceiro estágio limits os documentos de saída para retornar apenas o documento que aparece primeiro na ordem de classificação:

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

Dica

Veja também:

Voltar

$avg