MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

creare un documento mongodb con documenti secondari in modo atomico?

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 .