In general, if your data nodes are hosted in different geographical regions, latency between them will be considered high.
High latency will make the replication process slower, which means that using the write concern of
w:1 is highly recommended in order to prevent performance degradation. On the other hand, if the majority of your nodes were hosted in the same data center, you'd be fine with using
w: majority, which would improve your data safety without compromising performance.
Given that you use
w:1, you should use the read preference of
primaryPreferred. If you allowed reading from the secondaries, there would be no guarantee that the data read is up-to-date, which would lead to errors, such as contact locking inconsistencies.
On the other hand, if you had low latency between all replica set nodes, and given that you used
w:3 (or whatever your total number of nodes would be), then you could consider the read preference of
nearest. Although, this would only be recommended in read-heavy environments, which most Sitecore installations are not.
To prevent issues caused by high latency, use the write concern
w: 1 and the read preference