Имейте ввиду, что «из коробки» не обязательно всё заработает как ожидается (не знаю как там в последней версси монго) нужно правильно настроить Read Preference чтобы читать из secondary а писать в primary. И, возможно, без шардинга тоже не обойтись, хотя 4 млн. в коллекции это не так уж и много.
поможет репликация (replica set). теоретически можно на одной машине несолько mongod процессов запустить но не знаю что получится в боевых условиях. я менял структуру, разносил данные по разным коллекциям\базам, менял логику приложения (делал буфер). Еще типы подбирал, например MongoId не всегда самый быстрые на выборки, нужно учитывать размеры индексов. Еще монга сильно не любит на диск ходить — индексы должны помещаться в памяти, а лучше и данные тоже.