Jag undrar om drivrutinen är smart nog att bara uppdatera den minsta delmängden av ändringar eller om den bara blint uppdaterar hela grejen?
Nej, om du använder den "normala" uppdateringsmetoden kommer hela objektet att skickas över tråden. Jag misstänker att databasservern själv kommer att vara smart nog att bara uppdatera de nödvändiga indexen (och inte de som inte ändrades), om möjligt (dvs objektet kunde uppdateras på plats och behövde inte flyttas eftersom det växte för mycket)
Vad du kan göra är att använda funktionerna "atomic update modifier". Java-dokumentationen är lite lätt på dem, men eftersom drivrutinen bara sänder JSON, bör sakerna från de icke-Java-tutorials fungera, till exempel:
shapes.update((DBObject)JSON.parse( "{ 'foo' : 'bar'}"),
(DBObject) JSON.parse( "{ '$set' : { 'foo': 'bat'}}") );