Estoy un poco confundido por el findAndModify
método en MongoDB. ¿Cuál es la ventaja sobre el update
método? Para mí, parece que solo devuelve el artículo primero y luego lo actualiza. Pero, ¿por qué debo devolver el artículo primero? Leí el MongoDB: la guía definitiva y dice que es útil para manipular colas y realizar otras operaciones que necesitan atomicidad de estilo get-and-set. Pero no entendí cómo logra esto. ¿Alguien puede explicarme esto?
175
findAndModify
garantiza que no haya otra operación de actualización que interfiera con ella?findAndModify
devuelve el documento, la actualización no.Si entendí Dwight Merriman (uno de los autores originales de mongoDB) correctamente, usar la actualización para modificar un solo documento, es decir ("multi": falso} también es atómico. Actualmente, también debería ser más rápido que hacer la actualización equivalente usando
findAndModify
.fuente
De los documentos de MongoDB (énfasis agregado):
fuente
findAndModify()
modifican de manera predeterminada solo una ficha yupdate()
pueden actualizar una o más fichas, cuando uso unaarrayFilters
,findAndModify()
actualiza todas las coincidencias. Tal vez es un error?Una clase útil de casos de uso son los contadores y casos similares. Por ejemplo, eche un vistazo a este código (una de las pruebas de MongoDB): find_and_modify4.js .
Por lo tanto,
findAndModify
incrementa el contador y obtén su valor incrementado en un solo paso. Compare: si (A) realiza esta operación en dos pasos y otra persona (B) realiza la misma operación entre sus pasos, entonces A y B pueden obtener el mismo último valor de contador en lugar de dos diferentes (solo un ejemplo de posibles problemas).fuente
Utilizamos findAndModify () para operaciones de contador (inc o dec) y otros casos de mutación de campos únicos. Al migrar nuestra aplicación de Couchbase a MongoDB, encontré que esta API reemplaza el código que hace GetAndlock (), modifica el contenido localmente, reemplaza () para guardar y Get () nuevamente para recuperar el documento actualizado. Con mongoDB, acabo de usar esta API única que devuelve el documento actualizado.
fuente