I MongoDB kan du använda Object.bsonSize()
metod för att returnera storleken på ett dokument i byte.
Exempel
Anta att vi har en samling som heter bars
med följande 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 att location
fältet innehåller ett dokument. Och reviews
fältet innehåller en mängd dokument.
Låt oss först använda Object.bsonSize()
metod för att returnera storleken på dokumentet på översta nivån.
Object.bsonsize(db.bars.findOne())
Resultat:
502
Vi kan se att hela dokumentet är 502 byte.
Observera att jag använder findOne()
och inte find()
. Anledningen till detta är att find()
returnerar en markör i stället för själva dokumentet. findOne()
metod, å andra sidan, returnerar det faktiska dokumentet och dess resultat bör därför vara korrekta.
Underdokument
Låt oss använda Object.bsonSize()
för att kontrollera storleken på location
fältet.
Vi kan använda punktnotation för att få värdet på location
fält:
Object.bsonsize(
db.bars.findOne().location
)
Resultat:
61
I det här fallet är dokumentet 61 byte.
Bara för att vara säker, här är vad vi faktiskt skickade till Object.bsonSize()
metod:
db.bars.findOne().location
Resultat:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
Så det är dokumentet som är på 61 byte.
Dokument i arrayer
Vi kan också hämta storleken på dokument som är delar av en array.
Exempel:
Object.bsonsize(
db.bars.findOne().reviews[0]
)
Resultat:
91
MongoDB-matriser är nollbaserade, så det här dokumentet är den första recensionen.
Vi kan köra argumentet för sig för att se hela dokumentet:
db.bars.findOne().reviews[0]
Resultat:
{ "name" : "Steve", "date" : "20 December, 2020", "rating" : 5, "comments" : "Great vibe." }
Projektioner
Vi kan använda Object.bsonSize()
metod för att returnera storleken på dokumentet som returneras av en projektion. För att göra detta behöver vi helt enkelt tillhandahålla projektionen i vår fråga.
Exempel:
Object.bsonsize(
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
)
Resultat:
76
I det här fallet får vi en storlek på 76.
Du kanske har märkt att location
i vårt tidigare exempel fältet var 61 byte, men nu är det 76.
Vad händer?
Tja, när vi använder projektioner, som vi är i det här exemplet, returnerar vi faktiskt ett yttre dokument som innehåller location
fältnamnet och dess värde.
Det här är vad den här prognosen ger:
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
Resultat:
{ "location" : { "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] } }
Men i vårt tidigare exempel gick vår fråga så här:
db.bars.findOne().location
Och returnerade detta:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
Så vårt projektionsexempel returnerade ett större dokument, på grund av att det returnerade både fältnamnet och värdet. Och vårt tidigare exempel returnerade ett mindre dokument på grund av att det bara returnerade värdet.
Aggregation Pipeline
När du använder aggregeringspipelinen kan du använda $bsonSize
operatör för att få storleken på ett dokument.
Du kan också använda $binarySize
operatorn för att få storleken på en sträng eller binärt värdes innehåll i byte.