MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB $ dimensione binaria

Da MongoDB 4.4, puoi usare $binarySize operatore della pipeline di aggregazione per restituire la dimensione di una determinata stringa o il contenuto di un valore di dati binari in byte.

Accetta qualsiasi espressione valida purché si risolva in una stringa o in un valore di dati binari. L'argomento può anche essere null , nel qual caso, $binarySize restituisce null .

Esempio

Supponiamo di avere una raccolta chiamata posts con il seguente documento:

{
	"_id" : 1,
	"title" : "Hello World!",
	"body" : "This is a test post for the purposes of testing",
	"tags" : [
		"html",
		"css",
		"sql",
		"xml"
	],
	"status" : null
}

Possiamo usare il $binarySize operatore per verificare la dimensione dei vari campi.

Esempio:

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

Risultato:

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

In questo caso, restituiamo la dimensione binaria del title campo e il body campo.

Valori Nulli

Se il valore del campo specificato è null , il $binarySize l'operatore restituirà null .

Esempio:

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

Risultato:

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

In questo caso, lo status il campo nel nostro documento è null , e così $binarySize restituito null .

Tipi di dati errati

Come accennato, $binarySize accetta qualsiasi espressione valida purché si risolva in una stringa, un valore di dati binari o null .

Ecco un esempio di cosa succede se fornisci un'espressione che si risolve in un tipo BSON diverso:

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

Risultato:

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

In questo caso, abbiamo provato a trovare la dimensione di un array, ma non è uno dei tipi BSON supportati, quindi viene visualizzato un errore.

Tuttavia, possiamo ancora ottenere le dimensioni dei singoli elementi dell'array (purché siano uno dei tipi supportati).

Esempio:

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

Risultato:

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

In questo esempio, otteniamo la dimensione del primo elemento dell'array (gli array sono a base zero, quindi 0 si riferisce al primo elemento).

Dimensione del documento

MongoDB ha anche il $bsonSize operatore, che ti consente di ottenere le dimensioni di un documento.

Un altro modo per ottenere le dimensioni di un documento è utilizzare Object.bsonSize() metodo.