ну, все зависит, я думаю ... зависит от ваших критериев поиска. По моему мнению, это может быть только пункт 1 (или он должен быть сильно оптимизирован), поскольку любая фильтрация или агрегация или что-то еще может быть в полях, которые не находятся в проекции. и кстати .... определить "выборка". извлекать клиенту, я бы сказал нет, «извлекать» на сервере да. В целом, я бы сказал, что если ваши запросы не так сложны, даже если проекция занимает некоторое дополнительное время, она будет сбалансирована с общим временем передачи данных клиенту. В целом, мы говорим здесь миллисекунды, и общее время передачи и задержки сложнее преодолеть, чем оптимизацию запросов к БД.
Кроме того, я обнаружил следующее (более техническое, чем мое мнение): https://dba.stackexchange.com/questions/198444/how-mongodb-projection-affects-performance