I MongoDB kan du bruge Object.bsonSize()
metode til at returnere størrelsen af et dokument i bytes.
Eksempel
Antag, at vi har en samling kaldet bars
med følgende dokument:
{ "_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" } ] }
Vi kan se, at location
feltet indeholder et dokument. Og reviews
feltet indeholder en række dokumenter.
Lad os først bruge Object.bsonSize()
metode til at returnere størrelsen af dokumentet på øverste niveau.
Object.bsonsize(db.bars.findOne())
Resultat:
502
Vi kan se, at hele dokumentet er på 502 bytes.
Bemærk, at jeg bruger findOne()
og ikke find()
. Grunden til dette er, at find()
returnerer en markør i stedet for selve dokumentet. findOne()
metode, på den anden side, returnerer det faktiske dokument, og dets resultater bør derfor være nøjagtige.
Underdokumenter
Lad os bruge Object.bsonSize()
for at kontrollere størrelsen på location
felt.
Vi kan bruge punktnotation til at få værdien af location
felt:
Object.bsonsize(
db.bars.findOne().location
)
Resultat:
61
I dette tilfælde er dokumentet 61 bytes.
Bare for at være sikker, her er, hvad vi faktisk sendte til Object.bsonSize()
metode:
db.bars.findOne().location
Resultat:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
Så det er dokumentet på 61 bytes.
Dokumenter i arrays
Vi kan også hente størrelsen af dokumenter, der er elementer i et array.
Eksempel:
Object.bsonsize(
db.bars.findOne().reviews[0]
)
Resultat:
91
MongoDB-arrays er nul-baserede, så dette dokument er den første anmeldelse.
Vi kan køre argumentet for sig selv for at se hele dokumentet:
db.bars.findOne().reviews[0]
Resultat:
{ "name" : "Steve", "date" : "20 December, 2020", "rating" : 5, "comments" : "Great vibe." }
Projektioner
Vi kan bruge Object.bsonSize()
metode til at returnere størrelsen af det dokument, der returneres af en projektion. For at gøre dette skal vi blot angive projektionen i vores forespørgsel.
Eksempel:
Object.bsonsize(
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
)
Resultat:
76
I dette tilfælde får vi en størrelse på 76.
Du har måske bemærket, at location
i vores tidligere eksempel felt var 61 bytes, men nu er det 76.
Hvad sker der?
Nå, når vi bruger projektioner, som vi er i dette eksempel, returnerer vi faktisk et ydre dokument, der indeholder location
feltnavn samt dets værdi.
Her er, hvad denne fremskrivning returnerer:
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
Resultat:
{ "location" : { "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] } }
Men i vores tidligere eksempel gik vores forespørgsel sådan her:
db.bars.findOne().location
Og returnerede dette:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
Så vores projektionseksempel returnerede et større dokument, på grund af det faktum, at det returnerede både feltnavnet og værdien. Og vores tidligere eksempel returnerede et mindre dokument på grund af det faktum, at det kun returnerede værdien.
Aggregation Pipeline
Når du bruger aggregeringspipelinen, kan du bruge $bsonSize
operatør for at få størrelsen på et dokument.
Du kan også bruge $binarySize
operator for at få størrelsen af en streng eller binær værdis indhold i bytes.