Zaktualizuj za pomocą upsert=true
może być użyty do wykonania niepodzielnego „wstawienia lub aktualizacji” (http://docs.mongodb.org/manual/core/update/#update-operations-with-the-upsert-flag
).
Na przykład, jeśli chcemy się upewnić, że dokument w kolekcji Front ma określony url
jest wstawiony dokładnie raz, możemy uruchomić coś takiego:
db.Front.update(
{url: 'http://example.com'},
{$set: {
url: 'http://example.com'},
found: true
}
)
Operacje na pojedynczym dokumencie w MongoDB są zawsze niepodzielne. W przypadku wprowadzania aktualizacji obejmujących wiele dokumentów nie jest gwarantowana niepodzielność. W takich przypadkach możesz zadać sobie pytanie:czy naprawdę muszę, aby operacje były atomowe? Jeśli odpowiedź brzmi „nie”, prawdopodobnie znajdziesz sposób na pracę z potencjalnie niespójnymi danymi. Jeśli odpowiedź brzmi tak i chcesz pozostać przy MongoDB, sprawdź wzorzec projektowy na Zatwierdzenia dwufazowe .