Каждый процесс, выполняющийся в докер-контейнере, думает, что он «единственный в мире». Это означает, что для этого процесса localhost означает: my, localhost контейнера. А ваш бэкэнд один в своем контейнере, поэтому он не может найти mongodb под localhost.
Чтобы решить эту проблему, вы должны поместить имя хоста "mongodb" вместо "localhost", так как в docker-compose вы можете обращаться к сервисам, используя их имена - это означает, что контейнер mongodb может также обращаться к вашему бэкэнду, используя домен "backend".
Обратите внимание также, что «ссылки» устарели в docker и не должны использоваться - это не требуется в вашей конфигурации, поскольку docker-compose предоставляет каждому сервису в файле docker-compose доступ друг к другу, используя метод, упомянутый выше.