Apa yang Anda butuhkan tidak mungkin menggunakan satu pembaruan tanpa logika sisi aplikasi. Perhatikan bahwa upsert sebagai fitur tidak relevan untuk masalah khusus ini kecuali jika Anda ingin membuat dokumen Widget baru secara otomatis jika tidak ada dengan nama yang diberikan.
Masalah yang Anda hadapi adalah tidak ada fungsi yang memungkinkan Anda melakukan dua pembaruan berbeda tergantung pada keberadaan elemen array. Hanya dua pilihan Anda adalah :
- Temukan item, tentukan keberadaan properti yang relevan, kompilasi pembaruan yang sesuai dengan properti baru atau ubah Anda dan jalankan. Ini datang dengan kelemahan penting bahwa ini bukan metode aman konkurensi. Dengan kata lain, jika dua layanan web mencoba hal ini secara bersamaan, satu sama lain dapat menimpa perubahan satu sama lain.
- Jadikan properti widget sebagai dokumen tingkat atas daripada disematkan. Memungkinkan Anda menggunakan upser untuk melakukan apa yang Anda inginkan. Kelemahan yang jelas adalah bahwa itu bukan pilihan yang sangat bagus dalam hal desain skema. Anda tidak akan mendapatkan semua properti secara otomatis jika Anda mengambil widget, misalnya.