это тоже будет работать, но при этом в запрос попа

это тоже будет работать, но при этом в запрос попадают все поля, и соответственно возрастает нагрузка и потребление памяти. Лучше все-таки до момента обращения к серверу правильно настроить select, чтобы в выборку попали только нужные поля. Странное дело, пока не могу понять

public function prepareQueryBeforeCount(xPDOQuery $c){
        $c=parent::prepareQueryBeforeCount($c);
        $c->select(['modUser.id','modUser.username']);
$c->prepare();
print $c->toSQL();
die;
    }

возвращает правильный запрос:

SELECT modUser.id, modUser.username FROM `spmx_users` AS `modUser`

а на выходе действительно отдает все поля

Array
(
    [success] => 1
    [total] => 5
    [results] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [username] => admin
                    [password] => P3/gWbTaphPr//hV8djePt1qdcjN5CIxBVKE5tqdJyQ=
                    [cachepwd] => 
                    [class_key] => modUser
                    [active] => 1
                    [remote_key] => 
                    [remote_data] => 
                    [hash_class] => hashing.modPBKDF2
                    [salt] => b052eb5470a21ff53697a5bf4cb43649
                    [primary_group] => 1
                    [session_stale] => Array
                        (
                            [1] => spravochniki
                            [2] => web
                        )

                    [sudo] => 1
                )

            [1] => Array

нигде в коде больше $c->select(...) не встречается вплоть до $modx->getCollection. Ничего не понимаю.