Чудя се дали драйверът е достатъчно умен, за да актуализира само най-малката част от промените или просто сляпо актуализира цялото нещо?
Не, ако използвате "нормалния" метод за актуализиране, целият обект ще бъде изпратен по кабела. Подозирам, че самият сървър на базата данни ще бъде достатъчно умен, за да актуализира само необходимите индекси (а не тези, които не са се променили), ако е възможно (т.е. обектът може да бъде актуализиран на място и не е трябвало да бъде преместван, защото е нараснал твърде много)
Това, което можете да направите, е да използвате функциите "атомен модификатор на актуализиране". Документацията на Java е малко по-лека за тях, но тъй като драйверът просто предава JSON, нещата от не-Java уроци трябва да работят, например:
shapes.update((DBObject)JSON.parse( "{ 'foo' : 'bar'}"),
(DBObject) JSON.parse( "{ '$set' : { 'foo': 'bat'}}") );