V MongoDB můžete použít Object.bsonSize()
metoda pro vrácení velikosti dokumentu v bajtech.
Příklad
Předpokládejme, že máme kolekci nazvanou bars
s následujícím dokumentem:
{ "_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" } ] }
Vidíme, že location
pole obsahuje dokument. A reviews
pole obsahuje pole dokumentů.
Nejprve použijeme Object.bsonSize()
metoda pro vrácení velikosti dokumentu nejvyšší úrovně.
Object.bsonsize(db.bars.findOne())
Výsledek:
502
Vidíme, že celý dokument má 502 bajtů.
Všimněte si, že používám findOne()
a ne find()
. Důvodem je to, že find()
vrátí kurzor, nikoli samotný dokument. findOne()
metoda na druhé straně vrací skutečný dokument a jeho výsledky by proto měly být přesné.
Vnořené dokumenty
Použijme Object.bsonSize()
zkontrolovat velikost location
pole.
K získání hodnoty location
můžeme použít tečkovou notaci pole:
Object.bsonsize(
db.bars.findOne().location
)
Výsledek:
61
V tomto případě má dokument 61 bajtů.
Pro jistotu zde je to, co jsme skutečně předali Object.bsonSize()
metoda:
db.bars.findOne().location
Výsledek:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
Takže to je dokument, který má 61 bajtů.
Dokumenty v polích
Můžeme také získat velikost dokumentů, které jsou prvky pole.
Příklad:
Object.bsonsize(
db.bars.findOne().reviews[0]
)
Výsledek:
91
Pole MongoDB jsou založeny na nule, takže tento dokument je první recenzí.
Můžeme spustit argument samotný, abychom viděli celý dokument:
db.bars.findOne().reviews[0]
Výsledek:
{ "name" : "Steve", "date" : "20 December, 2020", "rating" : 5, "comments" : "Great vibe." }
Projekce
Můžeme použít Object.bsonSize()
metoda pro vrácení velikosti dokumentu vráceného projekcí. Abychom to mohli udělat, musíme v našem dotazu poskytnout projekci.
Příklad:
Object.bsonsize(
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
)
Výsledek:
76
V tomto případě dostaneme velikost 76.
Možná jste si všimli, že v našem dřívějším příkladu location
pole bylo 61 bajtů, ale nyní je to 76.
Co se děje?
Když použijeme projekce, jako jsme v tomto příkladu, ve skutečnosti vracíme vnější dokument, který obsahuje location
název pole a také jeho hodnotu.
Zde je to, co tato projekce vrací:
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
Výsledek:
{ "location" : { "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] } }
V našem dřívějším příkladu však náš dotaz vypadal takto:
db.bars.findOne().location
A vrátil toto:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
Náš příklad projekce tedy vrátil větší dokument, protože vrátil název pole i hodnotu. A náš dřívější příklad vrátil menší dokument, protože vrátil pouze hodnotu.
Agregační kanál
Při použití agregačního kanálu můžete použít $bsonSize
operátor k získání velikosti dokumentu.
Můžete také použít $binarySize
operátor k získání velikosti obsahu řetězce nebo binární hodnoty v bajtech.