In MongoDB kunt u de Object.bsonSize()
. gebruiken methode om de grootte van een document in bytes terug te geven.
Voorbeeld
Stel dat we een verzameling hebben met de naam bars
met het volgende document:
{ "_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" } ] }
We kunnen zien dat de location
veld bevat een document. En de reviews
veld bevat een reeks documenten.
Laten we eerst de Object.bsonSize()
. gebruiken methode om de grootte van het document op het hoogste niveau te retourneren.
Object.bsonsize(db.bars.findOne())
Resultaat:
502
We kunnen zien dat het hele document 502 bytes is.
Merk op dat ik findOne()
. gebruik en niet find()
. De reden hiervoor is dat find()
geeft een cursor terug in plaats van het document zelf. De findOne()
methode, aan de andere kant, retourneert het eigenlijke document en de resultaten moeten daarom nauwkeurig zijn.
Subdocumenten
Laten we Object.bsonSize()
. gebruiken om de grootte van de location
te controleren veld.
We kunnen puntnotatie gebruiken om de waarde van de location
. te krijgen veld:
Object.bsonsize(
db.bars.findOne().location
)
Resultaat:
61
In dit geval is het document 61 bytes.
Voor de zekerheid, dit is wat we daadwerkelijk hebben doorgegeven aan de Object.bsonSize()
methode:
db.bars.findOne().location
Resultaat:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
Dus dat is het document van 61 bytes.
Documenten in arrays
We kunnen ook de grootte van documenten ophalen die elementen van een array zijn.
Voorbeeld:
Object.bsonsize(
db.bars.findOne().reviews[0]
)
Resultaat:
91
MongoDB-arrays zijn gebaseerd op nul, dus dit document is de eerste beoordeling.
We kunnen het argument zelf uitvoeren om het hele document te zien:
db.bars.findOne().reviews[0]
Resultaat:
{ "name" : "Steve", "date" : "20 December, 2020", "rating" : 5, "comments" : "Great vibe." }
Projecties
We kunnen de Object.bsonSize()
. gebruiken methode om de grootte van het document te retourneren dat wordt geretourneerd door een projectie. Om dit te doen, hoeven we alleen de projectie in onze zoekopdracht op te geven.
Voorbeeld:
Object.bsonsize(
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
)
Resultaat:
76
In dit geval krijgen we maat 76.
Het is je misschien opgevallen dat in ons eerdere voorbeeld de location
veld was 61 bytes, maar nu is het 76.
Wat is er aan de hand?
Welnu, wanneer we projecties gebruiken, zoals in dit voorbeeld, retourneren we eigenlijk een buitenste document dat de location
bevat veldnaam en de waarde ervan.
Dit is wat deze projectie oplevert:
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
Resultaat:
{ "location" : { "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] } }
In ons eerdere voorbeeld ging onze vraag echter als volgt:
db.bars.findOne().location
En gaf dit terug:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
Ons projectievoorbeeld retourneerde dus een groter document, omdat het zowel de veldnaam als de waarde retourneerde. En ons eerdere voorbeeld retourneerde een kleiner document omdat het alleen de waarde retourneerde.
Aggregatiepijplijn
Wanneer u de aggregatiepijplijn gebruikt, kunt u de $bsonSize
. gebruiken operator om de grootte van een document te krijgen.
U kunt ook de $binarySize
. gebruiken operator om de grootte van de inhoud van een string of binaire waarde in bytes te krijgen.