Ich frage mich, ob der Treiber schlau genug ist, nur die kleinste Teilmenge von Änderungen zu aktualisieren, oder ob er einfach blind das Ganze aktualisiert?
Nein, wenn Sie die "normale" Aktualisierungsmethode verwenden, wird das gesamte Objekt über die Leitung gesendet. Ich vermute, dass der Datenbankserver selbst schlau genug ist, nur die erforderlichen Indizes zu aktualisieren (und nicht die, die sich nicht geändert haben). wenn möglich (d. h. das Objekt konnte an Ort und Stelle aktualisiert werden und musste nicht verschoben werden, weil es zu stark gewachsen war)
Was Sie tun können, ist die Funktionen "Atomic Update Modifier" zu verwenden. Die Java-Dokumentation ist ein bisschen oberflächlich, aber da der Treiber nur JSON überträgt, sollte das Zeug aus den Nicht-Java-Tutorials funktionieren, zum Beispiel:
shapes.update((DBObject)JSON.parse( "{ 'foo' : 'bar'}"),
(DBObject) JSON.parse( "{ '$set' : { 'foo': 'bat'}}") );