Opdater med upsert=true
kan bruges til at udføre en atomisk "indsæt eller opdatering" (http://docs.mongodb.org/manual/core/update/#update-operations-with-the-upsert-flag
).
For eksempel hvis vi ønsker at sikre et dokument i Front-samling med specifik url
er indsat præcis én gang, kunne vi køre noget som:
db.Front.update(
{url: 'http://example.com'},
{$set: {
url: 'http://example.com'},
found: true
}
)
Operationer på et enkelt dokument i MongoDB er altid atomare. Hvis du laver opdateringer, der strækker sig over flere dokumenter, er der ingen garanti for atomicitet. I sådanne tilfælde kan du spørge dig selv:har jeg virkelig brug for, at operationerne er atomare? Hvis svaret er nej, vil du sandsynligvis finde rundt i at arbejde med potentielt uensartede data. Hvis svaret er ja, og du vil holde dig til MongoDB, så tjek designmønsteret på Tofaseforpligtelser .