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.