В MongoDB можете да използвате Object.bsonSize()
метод за връщане на размера на документ в байтове.
Пример
Да предположим, че имаме колекция, наречена bars
със следния документ:
{ "_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" } ] }
Можем да видим, че location
полето съдържа документ. И reviews
поле съдържа масив от документи.
Първо, нека използваме Object.bsonSize()
метод за връщане на размера на документа от най-високо ниво.
Object.bsonsize(db.bars.findOne())
Резултат:
502
Виждаме, че целият документ е 502 байта.
Забележете, че използвам findOne()
а не find()
. Причината за това е, че find()
връща курсор, а не самия документ. findOne()
Методът, от друга страна, връща действителния документ и следователно резултатите му трябва да са точни.
Поддокументи
Нека използваме Object.bsonSize()
за да проверите размера на location
поле.
Можем да използваме нотация с точки, за да получим стойността на location
поле:
Object.bsonsize(
db.bars.findOne().location
)
Резултат:
61
В този случай документът е 61 байта.
Само за да сме сигурни, ето какво всъщност предадохме на Object.bsonSize()
метод:
db.bars.findOne().location
Резултат:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
Това е документът, който е 61 байта.
Документи в масиви
Можем също да извлечем размера на документи, които са елементи на масив.
Пример:
Object.bsonsize(
db.bars.findOne().reviews[0]
)
Резултат:
91
Масивите на MongoDB са базирани на нула, така че този документ е първият преглед.
Можем да изпълним аргумента самостоятелно, за да видим целия документ:
db.bars.findOne().reviews[0]
Резултат:
{ "name" : "Steve", "date" : "20 December, 2020", "rating" : 5, "comments" : "Great vibe." }
Прожекции
Можем да използваме Object.bsonSize()
метод за връщане на размера на документа, върнат от проекция. За да направим това, просто трябва да предоставим проекцията в нашата заявка.
Пример:
Object.bsonsize(
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
)
Резултат:
76
В този случай получаваме размер 76.
Може би сте забелязали, че в нашия по-ранен пример, location
полето беше 61 байта, но сега е 76.
Какво става?
Е, когато използваме проекции, както сме в този пример, ние всъщност връщаме външен документ, който съдържа location
име на полето, както и неговата стойност.
Ето какво връща тази проекция:
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
Резултат:
{ "location" : { "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] } }
Въпреки това, в предишния ни пример, нашата заявка беше така:
db.bars.findOne().location
И върна това:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
Така че нашият пример за проекция върна по-голям документ, поради факта, че върна както името на полето, така и стойността. И нашият по-ранен пример върна по-малък документ поради факта, че върна само стойността.
Тръбопровод за агрегиране
Когато използвате конвейера за агрегиране, можете да използвате $bsonSize
оператор, за да получите размера на документ.
Можете също да използвате $binarySize
оператор за получаване на размера на съдържанието на низ или двоична стойност в байтове.