Je me demande si le pilote est assez intelligent pour ne mettre à jour que le plus petit sous-ensemble de modifications ou s'il ne fait que mettre à jour aveuglément l'ensemble ?
Non, si vous utilisez la méthode de mise à jour "normale", tout l'objet sera envoyé sur le réseau.Je soupçonne que le serveur de base de données lui-même sera assez intelligent pour ne mettre à jour que les index nécessaires (et non ceux qui n'ont pas changé), si possible (c'est-à-dire que l'objet peut être mis à jour sur place et n'a pas dû être déplacé car il a trop grandi)
Ce que vous pouvez faire, c'est utiliser les fonctions "modificateur de mise à jour atomique". La documentation Java est un peu légère, mais comme le pilote ne fait que transmettre le JSON, les éléments des didacticiels non Java devraient fonctionner, par exemple :
shapes.update((DBObject)JSON.parse( "{ 'foo' : 'bar'}"),
(DBObject) JSON.parse( "{ '$set' : { 'foo': 'bat'}}") );