Aktualizujte pomocí upsert=true
lze použít k provedení atomického „vložení nebo aktualizace“ (http://docs.mongodb.org/manual/core/update/#update-operations-with-the-upsert-flag
).
Například pokud se chceme ujistit, že dokument v kolekci Front se specifickou url
je vložen přesně jednou, mohli bychom spustit něco jako:
db.Front.update(
{url: 'http://example.com'},
{$set: {
url: 'http://example.com'},
found: true
}
)
Operace na jednom dokumentu v MongoDB jsou vždy atomické. Pokud provedete aktualizace, které zahrnují více dokumentů, není zaručena atomičnost. V takových případech si můžete položit otázku:Opravdu potřebuji, aby operace byly atomické? Pokud je odpověď ne, pak se pravděpodobně zorientujete v práci s potenciálně nekonzistentními daty. Pokud je odpověď ano a chcete zůstat u MongoDB, podívejte se na návrhový vzor na Dvoufázové závazky .