Индексы в MongoDB, представляю собой, в целом, то же самое, что и индексы в другой базе данных. Вместо перебора большой коллекции целиком, мы перебираем индекс, который гораздо проще запихать в память и работать с ним. Помимо прочего, индексы в отличии от самих данных, более нормализованы для поиска/сравнения значений.
Тут про индексы PostgreSQL, но аналогичным же образом, индексы работают во всех БД, с которыми приходилось работать мне.
После того, как поймете общее назначение индексов, можно будет легко найти интересующую Вас информацию по конкретному типу индексов в конкретной БД.
что происходит, когда мы их объявляем
Происходит чтение коллекции и построения индекса. Обычно, в физическом виде, это файл (или несколько файлов) на жестком диске.
Можно ли объявлять много индексов в коллекции?
Можно, но чем больше индексов - тем больше данные будут занимать на диске.
В идеале, под индекс попадают те данные, с которыми Вы работаете непосредственно, например, "логин" пользователя в таблице/коллекции пользователей, т.к. именно по нему происходит поиск. Все остальные данные, за пределами индекса, например, имя_пользователя, пароль, его телефон и т.д. - просто прилагаются "до кучи", в виде не индексированных данных, т.к. по ним либо не осуществляется поиск, либо, осуществляется довольно редко.