It happens because MongoDB uses pre-allocation of space for each of the files and keeps records ( journals ) of the history of use of the files.
There is a good answer here and I translate just a summary of how it works on MongoDB 3 below. The original answer comes from the information in the MongoDB FAQ
Pre-allocating files
MongoDB tries to avoid fragmentation on your hard drive by pre-allocating a size to each file. This is why the size on your hard drive may be larger than the size that is actually in use by your data.
This is probably the biggest cause of the difference you find. The storage.mmapv1.smallFiles
option allows you to reduce the size of these files.
The oplog.rs registry
If the mongod you are using is a member of a replica set, the data folder includes a oplog.rs
file. Here is a capped collection , which is a limited data set that is used as a buffer to streamline replication tasks.
Usually this adds about 5% to the volume of your data.
The registration
The data folder contains all the log files ( journal files ) that store changes on disk before applying it to the database.
Empty records
MongoDB maintains a list of empty records while deleting documents and collections. This space can be re-used, but it is not the default behavior.