In MongoDB, puoi usare Object.bsonSize()
metodo per restituire la dimensione di un documento in byte.
Esempio
Supponiamo di avere una collezione chiamata bars
con il seguente documento:
{ "_id" : 1, "name" : "Boardwalk Social", "location" : { "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }, "categories" : [ "Bar", "Restaurant", "Hotel" ], "reviews" : [ { "name" : "Steve", "date" : "20 December, 2020", "rating" : 5, "comments" : "Great vibe." }, { "name" : "Lisa", "date" : "25 October, 2020", "rating" : 3, "comments" : "They just raised their prices :(" }, { "name" : "Kim", "date" : "21 October, 2020", "rating" : 4, "comments" : "Nice for Friday happy hour" } ] }
Possiamo vedere che la location
campo contiene un documento. E le reviews
contiene un array di documenti.
Per prima cosa, utilizziamo Object.bsonSize()
metodo per restituire le dimensioni del documento di primo livello.
Object.bsonsize(db.bars.findOne())
Risultato:
502
Possiamo vedere che l'intero documento è di 502 byte.
Nota che sto usando findOne()
e non find()
. Il motivo è che find()
restituisce un cursore, anziché il documento stesso. Il findOne()
metodo, d'altra parte, restituisce il documento vero e proprio e i suoi risultati dovrebbero quindi essere accurati.
Documenti secondari
Usiamo Object.bsonSize()
per verificare la dimensione della location
campo.
Possiamo usare la notazione del punto per ottenere il valore della location
campo:
Object.bsonsize(
db.bars.findOne().location
)
Risultato:
61
In questo caso, il documento è di 61 byte.
Per sicurezza, ecco cosa abbiamo effettivamente passato a Object.bsonSize()
metodo:
db.bars.findOne().location
Risultato:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
Quindi questo è il documento di 61 byte.
Documenti negli array
Possiamo anche recuperare la dimensione dei documenti che sono elementi di un array.
Esempio:
Object.bsonsize(
db.bars.findOne().reviews[0]
)
Risultato:
91
Gli array MongoDB sono a base zero, quindi questo documento è la prima recensione.
Possiamo eseguire l'argomento da solo per vedere l'intero documento:
db.bars.findOne().reviews[0]
Risultato:
{ "name" : "Steve", "date" : "20 December, 2020", "rating" : 5, "comments" : "Great vibe." }
Proiezioni
Possiamo usare Object.bsonSize()
metodo per restituire la dimensione del documento restituita da una proiezione. Per fare ciò, dobbiamo semplicemente fornire la proiezione nella nostra query.
Esempio:
Object.bsonsize(
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
)
Risultato:
76
In questo caso, otteniamo una dimensione di 76.
Potresti aver notato che nel nostro esempio precedente, il location
il campo era 61 byte, ma ora è 76.
Cosa sta succedendo?
Bene, quando usiamo le proiezioni, come in questo esempio, stiamo effettivamente restituendo un documento esterno che contiene il location
nome del campo e il suo valore.
Ecco cosa restituisce questa proiezione:
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
Risultato:
{ "location" : { "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] } }
Tuttavia, nel nostro esempio precedente, la nostra query era così:
db.bars.findOne().location
E restituito questo:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
Quindi il nostro esempio di proiezione ha restituito un documento più grande, poiché ha restituito sia il nome del campo che il valore. E il nostro esempio precedente ha restituito un documento più piccolo perché ha restituito solo il valore.
Pipeline di aggregazione
Quando si utilizza la pipeline di aggregazione, è possibile utilizzare $bsonSize
operatore per ottenere le dimensioni di un documento.
Puoi anche usare $binarySize
per ottenere la dimensione di una stringa o del contenuto di un valore binario in byte.