ドライバーが変更の最小のサブセットのみを更新するのに十分賢いのか、それとも単に全体を盲目的に更新しているだけなのかしら?
いいえ、「通常の」更新方法を使用すると、オブジェクト全体がネットワーク経由で送信されます。データベースサーバー自体は、必要なインデックス(変更されていないインデックスではない)のみを更新するのに十分賢いのではないかと思います。可能であれば(つまり、オブジェクトはその場で更新でき、大きくなりすぎたために移動する必要はありませんでした)
できることは、「アトミック更新修飾子」関数を使用することです。 Javaのドキュメントは少し軽いですが、ドライバーはJSONを送信するだけなので、Java以外のチュートリアルの内容は機能するはずです。例:
shapes.update((DBObject)JSON.parse( "{ 'foo' : 'bar'}"),
(DBObject) JSON.parse( "{ '$set' : { 'foo': 'bat'}}") );