Salvar x Inserir:
Em seus exemplos dados, o comportamento é essencialmente o mesmo.
save
se comporta de maneira diferente se for passado com um parâmetro "_id". Para salvar, se o documento contiver
_id
, ele fará um upsert consultando a coleção no _id
campo, se não, ele irá inserir.
Se não existir um documento com o valor _id especificado, o método save() realiza uma inserção com os campos especificados no documento.
Se existir um documento com o valor _id especificado, o método save() realizará uma atualização, substituindo todos os campos do registro existente pelos campos do documento.
Salvar x Atualizar :
update
modifica um documento existente que corresponda aos seus parâmetros de consulta. Se não houver tal documento correspondente, é quando upsert
vem na foto. upsert : false
:Nada acontece quando esse documento não existeupsert : true
:Novo documento é criado com conteúdo igual aos parâmetros de consulta e parâmetros de atualização
save
:não permite nenhum parâmetro de consulta. se _id
existe e existe um documento correspondente com o mesmo _id
, ele o substitui. Quando nenhum _id especificado/nenhum documento correspondente, ele insere o documento como um novo.