Was Sie benötigen, ist mit einem einzelnen Update ohne eine anwendungsseitige Logik nicht möglich. Beachten Sie, dass Upsert als Funktion für dieses spezielle Problem nicht relevant ist, es sei denn, Sie möchten automatisch neue Widget-Dokumente erstellen, wenn keine mit dem angegebenen Namen vorhanden sind.
Das Problem, auf das Sie stoßen, besteht darin, dass es keine Funktionalität gibt, mit der Sie je nach Vorhandensein eines Array-Elements zwei verschiedene Aktualisierungen durchführen können. Ihre einzigen zwei Optionen sind:
- Finden Sie den Artikel, stellen Sie das Vorhandensein relevanter Eigenschaften fest, erstellen Sie ein entsprechendes Update mit Ihren neuen oder geänderten Eigenschaften und führen Sie es aus. Dies hat den wichtigen Nachteil, dass dies keine parallelitätssichere Methode ist. Mit anderen Worten, wenn zwei Webdienste dies gleichzeitig versuchen, könnte einer die Änderungen des anderen überschreiben.
- Machen Sie Widget-Eigenschaften zu Dokumenten der obersten Ebene, anstatt sie einzubetten. Ermöglicht es Ihnen, Upserts zu verwenden, um zu tun, was Sie wollen. Der offensichtliche Nachteil ist, dass dies keine sehr schöne Option in Bezug auf das Schemadesign ist. Sie würden beispielsweise nicht automatisch alle Eigenschaften erhalten, wenn Sie ein Widget abrufen.