In a previous topic I have described our journey in optimising a symfony app ( the-journey-of-a-symfony-api-from-150ms-to-20ms ). Some of you have asked about specific configs, so here we go:

Install mongo-odm and the adapter:

php composer.phar require alcaeus/mongo-php-adapter
php composer.phar require doctrine/mongodb-odm-bundle

Now let's configure it:

doctrine_mongodb:
    connections:
        default:
            server: mongodb://%mongo_server%
            options:
                connect: true
                connectTimeoutMS: 300 # as stated in the original post: timeouts are very important
    default_database: %database_name%
    document_managers:
        default:
            # this is also important to reduce disk usage, you could also use other backends for caching this
            metadata_cache_driver: apc   
            retry_connect:              1
            retry_query:                1
            auto_mapping: true

To have the best control I recommend to allow slave readonly only from code. For this you can simply use:

$this->mongo->getManager()->getClassMetadata(MyDocumentType::class)->slaveOkay = true