Aus den von Ihnen genannten Gründen ist dies derzeit nicht mit einem regulären Update-Vorgang möglich.
Die einzige Lösung, die Sie im Moment verwenden können, besteht darin, Ihrem Dokument eine Versionierung hinzuzufügen und optimistisches Sperren zu verwenden, indem Sie das Dokument lesen, die entsprechenden Elemente zum Ändern in Ihrer Anwendung finden, ihre Werte ändern und dann ein update
die die Version im gelesenen Dokument enthält (so dass Sie, wenn ein anderer Thread das Dokument zwischen Ihrer Abfrage und Ihrer Aktualisierung aktualisiert, die Änderungen nicht überschreiben würden, sondern das Dokument neu laden und es erneut versuchen müssten.
Die Versionierungsstrategie müsste nicht auf dem gesamten Dokument basieren, Sie können die Array-Elemente der ersten Ebene versionieren und dann nur das betreffende Sub-Array aktualisieren (über ein Update mit $set).