Det finns inget sätt att göra detta för närvarande med en vanlig uppdateringsoperation av skäl som du noterat.
Det enda du kan använda för tillfället är att lägga till versionshantering till ditt dokument och använda optimistisk låsning genom att läsa dokumentet, hitta lämpliga element att ändra i din applikation, ändra deras värden och sedan använda en update
som inkluderar versionen i det lästa dokumentet (så att om en annan tråd uppdaterade dokumentet mellan din fråga och din uppdatering skulle du inte skriva över ändringarna utan måste ladda om dokumentet och försöka igen.
Versioneringsstrategin skulle inte behöva baseras på hela dokumentet, du kan versionera de första arrayelementen och sedan skulle du kunna uppdatera bara den underarray du var intresserad av (via en uppdatering med $set).