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.