Raison :"La requête s'exécute si le rappel est passé, sinon un objet Query est renvoyé." (ci-dessous la section des retours)
.then()
n'est pas vraiment une promesse, elle est déguisée en mangouste mais agit comme une exécution.
Vous pouvez le voir exécuter des requêtes ici
.exec()
à partir de la documentation
"Exécute la requête" et renvoie une promesse (vraie)