Postando minha própria resposta para que isso não fique aberto:
Os modelos da versão 4 (lançados estáveis em 25/03/2015) agora expõem um
hydrate()
método. Nenhum dos campos será marcado como sujo inicialmente, significando uma chamada para save()
não fará nada até que um campo seja alterado. https://github.com/LearnBoost/mongoose /blob/41ea6010c4a84716aec7a5798c7c35ef21aa294f/lib/model.js#L1639-1657
É muito importante observar que isso se destina a ser usado para converter um objeto JS simples carregado do banco de dados em um documento mongoose. Se você está recebendo um documento de um serviço REST ou algo parecido, você deve usar
findById()
e update()
. Para aqueles que vivem perigosamente:
Se você realmente deseja atualizar um documento existente sem tocar no banco de dados, suponho que você possa chamar
hydrate()
, marque os campos como sujos e chame save()
. Isso não é muito diferente do método de configuração de doc.isNew = false;
como sugeri na minha pergunta original. No entanto, Valeri (da equipe do mangusto) sugeriu não fazer isso. Isso pode causar erros de validação e outros problemas de casos extremos e geralmente não é uma boa prática. findById é muito rápido e não será seu gargalo.