MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB $binarySize


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.