W MongoDB możesz użyć Object.bsonSize()
metoda zwracania rozmiaru dokumentu w bajtach.
Przykład
Załóżmy, że mamy kolekcję o nazwie bars
z następującym 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" } ] }
Widzimy, że location
pole zawiera dokument. Oraz reviews
pole zawiera tablicę dokumentów.
Najpierw użyjmy Object.bsonSize()
metoda zwracania rozmiaru dokumentu najwyższego poziomu.
Object.bsonsize(db.bars.findOne())
Wynik:
502
Widzimy, że cały dokument ma 502 bajty.
Zauważ, że używam findOne()
a nie find()
. Powodem tego jest to, że find()
zwraca kursor, a nie sam dokument. findOne()
Z drugiej strony metoda zwraca rzeczywisty dokument, a zatem jej wyniki powinny być dokładne.
Dokumenty podrzędne
Użyjmy Object.bsonSize()
aby sprawdzić rozmiar location
pole.
Możemy użyć notacji z kropkami, aby uzyskać wartość location
pole:
Object.bsonsize(
db.bars.findOne().location
)
Wynik:
61
W tym przypadku dokument ma 61 bajtów.
Dla pewności, oto, co faktycznie przekazaliśmy do Object.bsonSize()
metoda:
db.bars.findOne().location
Wynik:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
To jest dokument, który ma 61 bajtów.
Dokumenty w tablicach
Możemy również pobrać rozmiar dokumentów, które są elementami tablicy.
Przykład:
Object.bsonsize(
db.bars.findOne().reviews[0]
)
Wynik:
91
Tablice MongoDB są liczone od zera, więc ten dokument jest pierwszą recenzją.
Możemy uruchomić sam argument, aby zobaczyć cały dokument:
db.bars.findOne().reviews[0]
Wynik:
{ "name" : "Steve", "date" : "20 December, 2020", "rating" : 5, "comments" : "Great vibe." }
Projekcje
Możemy użyć Object.bsonSize()
metoda zwracania rozmiaru dokumentu zwróconego przez projekcję. Aby to zrobić, musimy po prostu podać projekcję w naszym zapytaniu.
Przykład:
Object.bsonsize(
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
)
Wynik:
76
W tym przypadku otrzymujemy rozmiar 76.
Być może zauważyłeś, że w naszym poprzednim przykładzie location
pole było 61 bajtów, ale teraz jest 76.
Co się dzieje?
Cóż, kiedy używamy prognoz, tak jak w tym przykładzie, w rzeczywistości zwracamy zewnętrzny dokument, który zawiera location
nazwa pola oraz jego wartość.
Oto, co zwraca ta projekcja:
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
Wynik:
{ "location" : { "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] } }
Jednak w naszym poprzednim przykładzie nasze zapytanie wyglądało tak:
db.bars.findOne().location
I zwrócił to:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
Więc nasz przykład projekcji zwrócił większy dokument, ponieważ zwrócił zarówno nazwę pola, jak i wartość. A nasz wcześniejszy przykład zwrócił mniejszy dokument, ponieważ zwracał tylko wartość.
Potok agregacji
Korzystając z potoku agregacji, możesz użyć $bsonSize
operatora, aby uzyskać rozmiar dokumentu.
Możesz także użyć $binarySize
operator, aby uzyskać rozmiar ciągu lub zawartości wartości binarnej w bajtach.