sql >> Base de Datos >  >> NoSQL >> MongoDB

Upsert Array Elements que coinciden con los criterios en un documento MongoDB?

Lo que necesita no es posible con una sola actualización sin alguna lógica del lado de la aplicación. Tenga en cuenta que upsert como característica no es relevante para este problema específico a menos que desee crear automáticamente nuevos documentos de Widget si no existe ninguno con el nombre proporcionado.

El problema con el que se encuentra es que no existe una funcionalidad que le permita realizar dos actualizaciones diferentes según la existencia de un elemento de matriz. Tus únicas dos opciones son:

  1. Encuentre el elemento, determine la existencia de propiedades relevantes, compile una actualización apropiada con sus propiedades nuevas o modificadas y ejecútela. Esto viene con la importante desventaja de que este no es un método seguro de concurrencia. En otras palabras, si dos servicios web intentan esto al mismo tiempo, uno podría sobrescribir los cambios del otro.
  2. Haga que las propiedades del widget sean documentos de nivel superior en lugar de incrustados. Te permite usar upserts para hacer lo que quieras. La desventaja obvia es que esa no es una opción muy buena en términos de diseño de esquema. No obtendrá automáticamente todas las propiedades si obtiene un widget, por ejemplo.