sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB $tamañobinario

Desde MongoDB 4.4, puede usar $binarySize operador de canalización de agregación para devolver el tamaño de una cadena determinada o el contenido de un valor de datos binarios en bytes.

Acepta cualquier expresión válida siempre que se resuelva en una cadena o un valor de datos binarios. El argumento también puede ser null , en cuyo caso, $binarySize devuelve null .

Ejemplo

Supongamos que tenemos una colección llamada posts con el siguiente 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 el $binarySize operador para verificar el tamaño de varios campos.

Ejemplo:

db.posts.aggregate([
  {
    $project: {
      "titleSize": { $binarySize: "$title" },
      "bodySize": { $binarySize: "$body" }
    }
  }
])

Resultado:

{ "_id" : 1, "titleSize" : 12, "bodySize" : 47 }

En este caso, devolvemos el tamaño binario del title campo y el body campo.

Valores nulos

Si el valor del campo especificado es null , el $binarySize el operador devolverá null .

Ejemplo:

db.posts.aggregate([
  {
    $project: {
      "statusSize": { $binarySize: "$status" }
    }
  }
])

Resultado:

{ "_id" : 1, "statusSize" : null }

En este caso, el status el campo en nuestro documento es null , y así $binarySize devolvió null .

Tipos de datos incorrectos

Como se mencionó, $binarySize acepta cualquier expresión válida siempre que se resuelva en una cadena, un valor de datos binarios o null .

Este es un ejemplo de lo que sucede si proporciona una expresión que se resuelve en un tipo de BSON diferente:

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

En este caso, intentamos encontrar el tamaño de una matriz, pero ese no es uno de los tipos de BSON admitidos, por lo que recibimos un error.

Sin embargo, todavía podemos obtener el tamaño de los elementos de matriz individuales (siempre que sean uno de los tipos admitidos).

Ejemplo:

db.posts.aggregate([
  {
    $project: {
      "tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
    }
  }
])

Resultado:

{ "_id" : 1, "tagsSize" : 4 }

En este ejemplo, obtenemos el tamaño del primer elemento de la matriz (las matrices se basan en cero, por lo que 0 se refiere al primer elemento).

Tamaño del documento

MongoDB también tiene el $bsonSize operador, que le permite obtener el tamaño de un documento.

Otra forma de obtener el tamaño de un documento es usar Object.bsonSize() método.