Това, от което се нуждаете, не е възможно да използвате една актуализация без някаква логика от страна на приложението. Обърнете внимание, че upsert като функция не е от значение за този конкретен проблем, освен ако не искате автоматично да създавате нови документи на Widget, ако не съществуват с предоставеното име.
Проблемът, с който се сблъсквате, е, че няма функционалност, която да ви позволява да правите две различни актуализации в зависимост от съществуването на елемент от масива. Единствените ви две опции са:
- Намерете елемента, определете съществуването на подходящи свойства, компилирайте подходяща актуализация с вашите нови или промени свойства и я изпълнете. Това идва с важния недостатък, че това не е безопасен метод за паралелност. С други думи, ако две уеб услуги опитат това в едно и също, една може да презапише промените една на друга.
- Направете свойствата на джаджа документи от най-високо ниво, а не вградени. Позволява ви да използвате upserts, за да правите това, което искате. Очевидният недостатък е, че това не е много добър вариант по отношение на дизайна на схемата. Няма да получите автоматично всички свойства, ако извлечете джаджа, например.