Nos seus exemplos, 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 pesquisará a coleção no _idcampo; caso contrário, ele será inserido.
Se um documento não existir com o valor _id especificado, o método save () executará uma inserção com os campos especificados no documento.
Se existir um documento com o valor especificado _id, o método save () executará uma atualização, substituindo todos os campos no registro existente pelos campos do documento.
Salvar vs Atualização :
updatemodifica um documento existente correspondente aos seus parâmetros de consulta. Se não houver esse documento correspondente, é quando upsertaparece a imagem.
upsert : false : Nada acontece quando esse documento não existe
upsert : true : Novo documento é criado com conteúdo igual a consulta de parâmetros e atualização de parâmetros
save: Não permite nenhum parâmetro de consulta. se _idexistir e houver um documento correspondente ao mesmo _id, ele o substituirá. Quando nenhum _id especificado / nenhum documento correspondente, ele insere o documento como um novo.
ambos têm sintaxe diferente. A atualização recebe vários argumentos ({condition}, {update to doc}, upsert, multi) enquanto o save aceita apenas um argumento (_id sendo o parâmetro do argumento condicional). _id campo.
Save()/ \
/ \
Having _id NotHaving _id
->Inthiscase save will do->It will do normal insertion
upsert to insert.Now in thiscase as insert()do.
what that means, it means
take the document and replace
the complete document having same
_id.
Vamos considerar os dois casos aqui para inserção:
1) Ter _id do doc na coleção.
2) Não ter _id de doc na coleção.
Insert()/ \
/ \
DocHaving _id in collection DocNotHaving _id
-> E11000 duplicate key ->Insert a new doc inside the collection.
error index:
Se você tentar usar "inserir" com um ID que foi usado anteriormente na mesma coleção, você receberá um erro de chave duplicada. Se você usar "salvar" com um ID que já esteja na mesma coleção, ele será atualizado / substituído.
Se você estiver procurando fazer uma atualização verdadeira, sugiro usar "update". A atualização não será substituída da maneira que o Save faria se você estivesse salvando usando o mesmo ID que já está na coleção.
Por exemplo, você tem dois campos "x" e "y" e deseja manter os dois, mas altere o valor de "x". Se você escolheu o comando "salvar" e não incluiu y com o valor anterior ou não tem y em seu salvamento, y não terá mais o mesmo valor ou estará lá. No entanto, se você optar por atualizar usando $ set e tiver apenas x incluído na sua declaração de atualização, você não afetará y.
db.collection.save()O método atualiza o documento se um documento com o mesmo _id já existir no banco de dados. Quando um documento com o mesmo _id já existe no banco de dados, o método save substitui completamente o documento pelo novo documento. Do livro - Pro MongoDB Development
jack blank
1
Em termos de ORACLE: mongo insert => Oracle insira mongo save => Oracle merge
Respostas:
Salvar vs inserção:
Nos seus exemplos, 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 pesquisará a coleção no_id
campo; caso contrário, ele será inserido.Salvar vs Atualização :
update
modifica um documento existente correspondente aos seus parâmetros de consulta. Se não houver esse documento correspondente, é quandoupsert
aparece a imagem.upsert : false
: Nada acontece quando esse documento não existeupsert : true
: Novo documento é criado com conteúdo igual a consulta de parâmetros e atualização de parâmetrossave
: Não permite nenhum parâmetro de consulta. se_id
existir e houver um documento correspondente ao mesmo_id
, ele o substituirá. Quando nenhum _id especificado / nenhum documento correspondente, ele insere o documento como um novo.fonte
Vamos considerar os dois casos aqui para salvar:
1) Tendo _id no doc.
2) Não ter _id no doc.
Vamos considerar os dois casos aqui para inserção:
1) Ter _id do doc na coleção.
2) Não ter _id de doc na coleção.
fonte
save
insira ou atualize um documento.insert
faz apenas uma inserção.Mas, no seu caso, ele fará o mesmo, pois o documento fornecido em save não possui
_id
campo.fonte
Dando um exemplo
Salve uma Apple
Salve uma maçã com _id da maçã salva anteriormente
Agora a maçã que salvamos tem, cor atualizada de vermelho para vermelho real
Salve uma maçã com _id
A Apple foi inserida porque não há maçã com o mesmo ID de objeto para fazer uma atualização
Inserir uma laranja
Laranja é inserida
Portanto, save será uma atualização se fornecida com um ID do objeto, desde que o ID do objeto já exista de outra forma.
fonte
Se você tentar usar "inserir" com um ID que foi usado anteriormente na mesma coleção, você receberá um erro de chave duplicada. Se você usar "salvar" com um ID que já esteja na mesma coleção, ele será atualizado / substituído.
Se você estiver procurando fazer uma atualização verdadeira, sugiro usar "update". A atualização não será substituída da maneira que o Save faria se você estivesse salvando usando o mesmo ID que já está na coleção.
Por exemplo, você tem dois campos "x" e "y" e deseja manter os dois, mas altere o valor de "x". Se você escolheu o comando "salvar" e não incluiu y com o valor anterior ou não tem y em seu salvamento, y não terá mais o mesmo valor ou estará lá. No entanto, se você optar por atualizar usando $ set e tiver apenas x incluído na sua declaração de atualização, você não afetará y.
fonte
Como você pode ver aqui, o método save fará essencialmente uma upsert (atualize se encontrar o documento, insira o contrário):
http://docs.mongodb.org/manual/reference/method/db.collection.save/#db.collection.save
Inserir é apenas isso, um inserto reto.
fonte
Considere o documento abaixo
se o db já contiver o documento com _id: 1,
salvar operação lançará a exceção como abaixo
e onde, como operação de inserção, substituirá apenas o documento.
fonte
db.collection.save()
O método atualiza o documento se um documento com o mesmo _id já existir no banco de dados. Quando um documento com o mesmo _id já existe no banco de dados, o método save substitui completamente o documento pelo novo documento. Do livro - Pro MongoDB DevelopmentEm termos de ORACLE: mongo insert => Oracle insira mongo save => Oracle merge
fonte
db.<collection_name>.save(<Document>)
é equivalente à consulta InsertOrUpdate.Enquanto,
db.<collection_name>.insert(<Document>)
é equivalente a apenas Inserir Consulta.fonte