mongodb compact does nothing - no entry in mongodb.log and nothing in db.currentOp()
Since you are using the MMAP storage engine there are several factors to be aware of:


The compact command only defragments data files &amp; indexes in MMAP; it does not release unused space to the operating system. Running compact can still be useful to reduce fragmentation and encourage free space reuse, but will not help if your disk space is critically low.
The compact command in MMAP requires additional disk space (up to 2GB) during the compact operation.
As at MongoDB 3.2, compact is a blocking command (database-level lock for the collection being compacted).


The approach to reclaiming preallocated space in MMAPv1 is rebuilding the database either through a resync (recommended for replica sets) or a repair (the only option for standalone deployments).


  repairDatabase doesn't work because no scratch space


You can use the command line option --repairpath or the config file option storage.repairPath to provide extra storage (i.e. a second volume) for working space during the repair process:

mongod --repair --repairpath /path/to/extraspace --dbpath ...


After the repair process completes, the rebuilt data files will reside in the dbpath and the repairpath should be empty.

WiredTiger Storage Engine

If you have the option of upgrading to the WiredTiger storage engine in future, it has many improvements over MMAP:


Data files and indexes are compressed by default (with configurable compression options that can be set globally or per collection).
The compact command can release storage to the O/S (MongoDB 3.2.3+).
Minimal additional space should be required in order to run the compact command.