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.