find i risultati possono includere solo i contenuti dei documenti stessi, mentre aggregate può proiettare nuovi valori derivati dal contenuto del documento (come la lunghezza di un array). Ecco perché devi usare aggregate per questo, anche se stai ricevendo solo un singolo documento.
Post.aggregate([{$match: {postId: 5}}, {$project: {upvotes: {$size: '$upvotes'}}}])
Un'unica eccezione è $meta
operatore di proiezione per proiettare un $text punteggio del risultato della query.