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 :
example@sqldat.com/mongo/shell/utils.js:25:13
example@sqldat.com/mongo/shell/assert.js:18:14
example@sqldat.com/mongo/shell/assert.js:618:17
example@sqldat.com/mongo/shell/assert.js:708:16
example@sqldat.com/mongo/shell/db.js:266:5
example@sqldat.com/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.