Il motivo è:"La query viene eseguita se viene passato il callback altrimenti viene restituito un oggetto Query." (di seguito la sezione resi)
.then()
non è davvero una promessa, è camuffata da mangusta ma funge da esecuzione.
Puoi vederlo eseguire query qui
.exec()
dalla documentazione
"Esegue la query" e restituisce una promessa (vera)