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.