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 :
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 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.