Questo sta accadendo perché anche se
db.repo.remove({"date" : {"$lt" : new Date(1362096000000)}})
sembra un singolo comando che in realtà sta operando su molti documenti, quanti soddisfano questa query.
Quando utilizzi la replica, ogni operazione di modifica deve essere scritta in una raccolta speciale in local
database chiamato oplog.rs
- oplog in breve.
L'oplog deve avere una voce per ogni documento eliminato e ognuna di queste voci deve essere applicata all'oplog su ogni secondario prima che possa eliminare anche lo stesso record.
Una cosa che posso suggerirti di considerare è Indici TTL - elimineranno "automaticamente" i documenti in base alla data/valore di scadenza che hai impostato - in questo modo non avrai un'eliminazione massiccia e sarai invece in grado di distribuire il carico più nel tempo.