Lepiej jest używać .aggregate()
aby to zrobić. Jest to również metoda bezpośrednia na obiektach kolekcji w nowoczesnych wersjach sterownika:
$result = $db->collection('Profit_and_loss')->aggregate(array(
array( '$group' => array(
'_id' => '$entity_id',
'year' => array( '$max' => '$year' )
))
));
.distinct()
polecenie działa tylko na jednym polu. Inne formularze wymagają oceny JavaScript, jak już zauważyłeś, i działają znacznie wolniej niż kod natywny.