There's a section in the documentation about Data Center Awareness and Deploying Geographically Distributed Replica Sets. Essentially, there's a tagging feature for sharding and for replica sets so you can explicitly specify where a write or read should go to.
The big question, however, concerns your application architecture and whether you want to have application servers in different zones or not. Since writes must always go to a primary, there's little benefit in having application servers in different locations for write-heavy applications.
You can, however, speed up reads by either using the tag feature or by using nearest
as a read preference, which will help read-heavy applications a lot.
Generally speaking, hosting applications in different data centers is not easy, because you either need a single point of synchronization or you need to use some kind of multi-version concurrency. From a technical perspective, that is a tradeoff, and it depends on the nature of the application which position in the spectrum works best for you.