Personalmente andrei con una raccolta separata, principalmente allo scopo di mantenere piccoli i tuoi oggetti utente/luogo, poiché puoi avere un numero illimitato di check-in per utente/luogo. Se inserisci un indice su user_id/timestampl e place_id/timestamp nella tua raccolta di check-in, le query per un particolare utente o luogo saranno efficienti. Un secondo vantaggio dell'utilizzo di una raccolta separata è che MongoDB non dovrà continuare a spostare l'utente o posizionare l'oggetto quando diventa troppo grande. Invece, continuerà ad aggiungersi alla raccolta di check-in, che dovrebbe essere abbastanza efficiente (10 su 1000 di inserti al secondo per shard).
Dovrei anche menzionare che non memorizza gli ID check-in nel luogo né nel documento utente, poiché ottieni lo stesso vantaggio in termini di prestazioni dall'avere un indice su place_id o user_id nel documento check-in.