Il n'y a aucun moyen de le faire actuellement en utilisant une opération de mise à jour régulière pour les raisons que vous avez notées.
La seule solution que vous pouvez utiliser pour le moment consiste à ajouter une gestion des versions à votre document et à utiliser le verrouillage optimiste en lisant le document, en trouvant les éléments appropriés à modifier dans votre application, en modifiant leurs valeurs, puis en utilisant une update
qui inclut la version dans le document lu (de sorte que si un autre thread mettait à jour le document entre votre requête et votre mise à jour, vous n'écraseriez pas les modifications, mais vous devriez recharger le document et réessayer.
La stratégie de gestion des versions n'aurait pas besoin d'être basée sur l'ensemble du document, vous pouvez versionner les éléments du tableau de premier niveau et vous pourrez alors mettre à jour uniquement le sous-tableau qui vous intéresse (via une mise à jour avec $set).