Estou um pouco confuso com o findAndModify
método no MongoDB. Qual é a vantagem disso sobre o update
método? Para mim, parece que ele retorna o item primeiro e depois o atualiza. Mas por que preciso devolver o item primeiro? Eu li o MongoDB: o guia definitivo e ele diz que é útil para manipular filas e executar outras operações que precisam de atomicidade no estilo get-and-set. Mas não entendi como isso é alcançado. Alguém pode me explicar isso?
175
findAndModify
garante que não há outra operação de atualização interferindo nela?findAndModify
retorna o documento, a atualização não.Se eu entendi Dwight Merriman (um dos autores originais do mongoDB) corretamente, o uso de update para modificar um único documento, ou seja ("multi": false} também é atômico. Atualmente, também deve ser mais rápido do que fazer a atualização equivalente usando
findAndModify
.fonte
Dos documentos do MongoDB (ênfase adicionada):
fonte
findAndModify()
por padrão modifiquem apenas um documento eupdate()
possam atualizar um ou mais documentos, quando eu uso umarrayFilters
,findAndModify()
atualiza todas as correspondências. Talvez seja um bug ??Uma classe útil de casos de uso é contadores e casos semelhantes. Por exemplo, dê uma olhada neste código (um dos testes do MongoDB): find_and_modify4.js .
Assim,
findAndModify
você incrementa o contador e obtém seu valor incrementado em uma etapa. Compare: se você (A) executar esta operação em duas etapas e outra pessoa (B) fizer a mesma operação entre suas etapas, A e B poderão obter o mesmo último valor do contador em vez de dois diferentes (apenas um exemplo de possíveis problemas).fonte
Usamos findAndModify () para operações de contador (inc ou dec) e outros campos únicos alteram casos. Ao migrar nosso aplicativo do Couchbase para o MongoDB, encontrei esta API para substituir o código GetAndlock (), modificar o conteúdo localmente, substituir () para salvar e Get () novamente para recuperar o documento atualizado. Com o mongoDB, eu apenas usei essa API única que retorna o documento atualizado.
fonte