A partir do MongoDB 4.4, você pode usar o
$binarySize
operador de pipeline de agregação para retornar o tamanho de uma determinada string ou conteúdo de valor de dados binários em bytes. Ele aceita qualquer expressão válida, desde que resolva para uma string ou valor de dados binários. O argumento também pode ser
null
, nesse caso, $binarySize
retorna null
. Exemplo
Suponha que tenhamos uma coleção chamada
posts
com o seguinte documento:{ "_id" : 1, "title" : "Hello World!", "body" : "This is a test post for the purposes of testing", "tags" : [ "html", "css", "sql", "xml" ], "status" : null }
Podemos usar o
$binarySize
operador para verificar o tamanho de vários campos. Exemplo:
db.posts.aggregate([
{
$project: {
"titleSize": { $binarySize: "$title" },
"bodySize": { $binarySize: "$body" }
}
}
])
Resultado:
{ "_id" : 1, "titleSize" : 12, "bodySize" : 47 }
Nesse caso, retornamos o tamanho binário do
title
campo e o body
campo. Valores nulos
Se o valor do campo especificado for
null
, o $binarySize
operador retornará null
. Exemplo:
db.posts.aggregate([
{
$project: {
"statusSize": { $binarySize: "$status" }
}
}
])
Resultado:
{ "_id" : 1, "statusSize" : null }
Nesse caso, o
status
campo em nosso documento é null
, e assim $binarySize
retornou null
. Tipos de dados incorretos
Como mencionado,
$binarySize
aceita qualquer expressão válida desde que resolva para uma string, um valor de dados binários ou null
. Aqui está um exemplo do que acontece se você fornecer uma expressão que resolve para um tipo diferente de BSON:
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: "$tags" }
}
}
])
Resultado:
Error: command failed: { "ok" : 0, "errmsg" : "$binarySize requires a string or BinData argument, found: array", "code" : 51276, "codeName" : "Location51276" } : aggregate failed : [email protected]/mongo/shell/utils.js:25:13 [email protected]/mongo/shell/assert.js:18:14 [email protected]/mongo/shell/assert.js:618:17 [email protected]/mongo/shell/assert.js:708:16 [email protected]/mongo/shell/db.js:266:5 [email protected]/mongo/shell/collection.js:1046:12 @(shell):1:1
Nesse caso, tentamos encontrar o tamanho de um array, mas esse não é um dos tipos BSON suportados, então recebemos um erro.
No entanto, ainda podemos obter o tamanho de elementos de matriz individuais (desde que sejam um dos tipos suportados).
Exemplo:
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
}
}
])
Resultado:
{ "_id" : 1, "tagsSize" : 4 }
Neste exemplo, obtemos o tamanho do primeiro elemento do array (os arrays são baseados em zero, então
0
refere-se ao primeiro elemento). Tamanho do documento
MongoDB também tem o
$bsonSize
operador, que permite obter o tamanho de um documento. Outra maneira de obter o tamanho de um documento é usar o
Object.bsonSize()
método.