To, co požadujete, není možné pomocí jediné aktualizace bez určité logiky na straně aplikace. Všimněte si, že upsert jako funkce není pro tento konkrétní problém relevantní, pokud nechcete automaticky vytvářet nové dokumenty widgetů, pokud žádné neexistují se zadaným názvem.
Problém, na který narážíte, je, že neexistuje žádná funkce, která by vám umožňovala provádět dvě různé aktualizace v závislosti na existenci prvku pole. Vaše jediné dvě možnosti jsou:
- Najděte položku, zjistěte existenci příslušných vlastností, zkompilujte vhodnou aktualizaci s vašimi novými vlastnostmi nebo vlastnostmi změn a spusťte ji. To přichází s důležitou nevýhodou, že to není metoda bezpečná pro souběžnost. Jinými slovy, pokud se o to pokusí dvě webové služby současně, jedna by mohla přepsat vzájemné změny.
- Vytvářejte z vlastností widgetu dokumenty nejvyšší úrovně, nikoli vložené. Umožňuje vám používat upserts k tomu, co chcete. Zjevnou nevýhodou je, že to není příliš pěkná možnost, pokud jde o návrh schématu. Pokud například stáhnete widget, nezískáte automaticky všechny vlastnosti.