В 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 оператор за получаване на размера на съдържанието на низ или двоична стойност в байтове.