Obecnie nie można tego zrobić za pomocą regularnej operacji aktualizacji z powodów, które wymieniłeś.
Jedyne obejście, którego możesz teraz użyć, to dodanie wersjonowania do dokumentu i użycie optymistycznego blokowania poprzez czytanie dokumentu, znajdowanie odpowiednich elementów do zmodyfikowania w swojej aplikacji, zmianę ich wartości, a następnie użycie update
który zawiera wersję w odczytywanym dokumencie (tak, że jeśli inny wątek zaktualizuje dokument między zapytaniem a aktualizacją, nie nadpiszesz zmian, ale będziesz musiał ponownie załadować dokument i spróbować ponownie.
Strategia wersjonowania nie musiałaby opierać się na całym dokumencie, możesz wersjonować elementy tablicy pierwszego poziomu, a następnie będziesz mógł zaktualizować tylko podtablicę, którą się interesujesz (poprzez aktualizację za pomocą $set).