Понастоящем няма начин да направите това с помощта на редовна операция за актуализиране поради причини, които сте отбелязали.
Единственото решение, което можете да използвате в момента, е да добавите версии към вашия документ и да използвате оптимистично заключване, като прочетете документа, намерите подходящите елементи за модифициране във вашето приложение, промените техните стойности и след това използвате update
който включва версията в прочетения документ (така че ако друга нишка актуализира документа между вашата заявка и вашата актуализация, вие няма да презапишете промените, а ще трябва да презаредите документа и да опитате отново.
Стратегията за управление на версиите не трябва да се основава на целия документ, можете да версирате елементите на масива от първо ниво и след това ще можете да актуализирате само подмасива, който ви интересува (чрез актуализация с $set).