Aktualizacja (marzec 2015): W wersji 3.0 w MongoDB dostępnych jest wiele silników pamięci masowej. Ta odpowiedź dotyczy silnika przechowywania MMAP (nadal domyślnego w MongoDB 3.0), odpowiedź dla innych silników (na przykład WiredTiger) jest zupełnie inna i może być dostosowywana i regulowana. Dlatego jeśli używasz innego silnika, zapoznaj się z odpowiednią dokumentacją dla tego silnika pamięci masowej, aby określić, jakie są ustawienia domyślne i opcje ponownego wykorzystania przestrzeni.
Dzięki silnikowi przechowywania MMAP, gdy dokumenty są usuwane, pozostała przestrzeń jest umieszczana na bezpłatnej liście. Jednak, aby wykorzystać miejsce, trzeba później wstawić dokumenty o podobnym rozmiarze, a MongoDB będzie musiało znaleźć odpowiednią przestrzeń dla tego dokumentu w określonych ramach czasowych (po przekroczeniu limitu czasu, patrząc na listę, po prostu dołączy) w przeciwnym razie ponowne wykorzystanie przestrzeni nie będzie zdarzało się zbyt często. To usuwanie odbywa się w plikach danych, więc nie ma tu miejsca na odzyskiwanie miejsca na dysku - wszystko to odbywa się wewnętrznie w istniejących plikach danych.
Jeśli następnie wykonasz naprawę lub ponownie zsynchronizujesz plik pomocniczy od zera, pliki danych zostaną ponownie zapisane, a miejsce na dysku zostanie odzyskane (wszelkie dopełnienie w dokumentach również zostanie usunięte). Tutaj zobaczysz rzeczywiste odzyskiwanie przestrzeni na dysku. W przypadku jakichkolwiek innych działań (w tym kompaktowych) użycie na dysku nie ulegnie zmianie, a może nawet wzrosnąć.
W wersji 2.2+ możesz teraz użyć polecenia collMod i opcji usePowersOf2Sizes, aby zwiększyć prawdopodobieństwo ponownego wykorzystania usuniętej przestrzeni (pamiętaj, że jest to ustawienie domyślne w wersji 2.6+). Oznacza to, że początkowa alokacja miejsca dla dokumentu jest nieco mniej wydajna (na przykład 512 bajtów dla 400-bajtowego dokumentu), ale oznacza, że po wstawieniu nowego dokumentu jest bardziej prawdopodobne, że będzie w stanie ponownie wykorzystać tę przestrzeń. Jeśli często usuwasz (lub powiększasz, a tym samym przenosisz) dokumenty, na dłuższą metę będzie to bardziej efektywne.
Dla każdego, kto jest zainteresowany, jedna z osób, które napisały dużo kodu pamięci masowej (Mathias Stearn) ma świetną prezentację na temat elementów wewnętrznych pamięci, którą można znaleźć tutaj