Uppdatera med upsert=true
kan användas för att utföra en atomär "insert or update" (http://docs.mongodb.org/manual/core/update/#update-operations-with-the-upsert-flag
).
Till exempel om vi vill säkerställa ett dokument i Front-samlingen med specifik url
är infogat exakt en gång, kan vi köra något i stil med:
db.Front.update(
{url: 'http://example.com'},
{$set: {
url: 'http://example.com'},
found: true
}
)
Operationer på ett enda dokument i MongoDB är alltid atomära. Om du gör uppdateringar som sträcker sig över flera dokument, garanteras ingen atomicitet. I sådana fall kan du fråga dig själv:behöver jag verkligen att operationerna är atomära? Om svaret är nej, kommer du förmodligen att hitta runt och arbeta med potentiellt inkonsekventa data. Om svaret är ja och du vill hålla fast vid MongoDB, kolla in designmönstret på Tvåfas-åtaganden .