Upgrading can definitely be a challenge, particularly if you have multiple successive major versions to upgrade through.
Rather than performing manual upgrades or relying on O/S packages (which often don’t have a smooth upgrade path) I would use MongoDB-aware tooling. Upgrading a distributed database deployment with minimal downtime requires some coordination, but is certainly possible to automate.
There are three main options developed by MongoDB:
MongoDB Cloud Manager - monitoring, automation, and backup for self-hosted deployments. Cloud Manager uses an agent-based approach and is a freemium service (basic monitoring is free, automation requires a per server subscription, and backup is pay for use). If cloud-based agents are an option for your deployment, there’s a 30-day trial if you want to try out the automation features. Cloud Manager automation can handle upgrading or downgrading the versions of deployments, although typically you have to be starting from a supported (non End-of-Life) version of MongoDB server.
MongoDB Ops Manager - the on-premise version of Cloud Manager, which is part of a MongoDB Enterprise Advanced subscription. With Ops Manager you are responsible for setting up and managing all infrastructure for on-premise management of automation, backup, and monitoring.
MongoDB Atlas - fully managed MongoDB-as-a-service with upgrades managed via the Atlas UI or API. Atlas also has a live import feature which can be handy for migrating from an older version of MongoDB to a supported version. For example, you can live migrate from MongoDB 2.6 to 4.2.
There some other solutions that build on the above APIs, such as the Enterprise Operator for Kubernetes and the Atlas Open Service Broker. There are also various third party tooling & scripts which may be helpful depending on your environment and the types of deployments you manage.
What types of deployments are you managing (standalone, replica set, or sharded cluster) and how are you currently automating upgrades? Are you using any automation or orchestration tooling (for example: Ansible, Chef, Puppet, Salt, Terraform, … )?