Aggiorna con upsert=true
può essere utilizzato per eseguire un "inserimento o aggiornamento" atomico (http://docs.mongodb.org/manual/core/update/#update-operations-with-the-upsert-flag
).
Ad esempio, se vogliamo assicurarci un documento nella raccolta Front con url
specifico viene inserito esattamente una volta, potremmo eseguire qualcosa del tipo:
db.Front.update(
{url: 'http://example.com'},
{$set: {
url: 'http://example.com'},
found: true
}
)
Le operazioni su un singolo documento in MongoDB sono sempre atomiche. Se esegui aggiornamenti che si estendono su più documenti, l'atomicità non è garantita. In questi casi, puoi chiederti:ho davvero bisogno che le operazioni siano atomiche? Se la risposta è no, probabilmente troverai il modo di lavorare con dati potenzialmente incoerenti. Se la risposta è sì e vuoi restare con MongoDB, controlla il design pattern su Impegni a due fasi .