MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb-Dokument mit Unterdokumenten atomar erstellen?

Aktualisieren Sie mit upsert=true kann verwendet werden, um ein atomisches „Einfügen oder Aktualisieren“ durchzuführen (http://docs.mongodb.org/manual/core/update/#update-operations-with-the-upsert-flag ).

Zum Beispiel, wenn wir sicherstellen möchten, dass ein Dokument in der Front-Sammlung mit einer bestimmten url vorhanden ist genau einmal eingefügt wird, könnten wir etwa Folgendes ausführen:

db.Front.update(
    {url: 'http://example.com'},
    {$set: {
       url: 'http://example.com'},
       found: true
    }
)

Vorgänge für ein einzelnes Dokument in MongoDB sind immer atomar. Wenn Sie Aktualisierungen vornehmen, die sich über mehrere Dokumente erstrecken, ist keine Atomarität garantiert. In solchen Fällen kann man sich fragen:Brauche ich wirklich atomare Operationen? Wenn die Antwort nein lautet, werden Sie sich wahrscheinlich zurechtfinden, wenn Sie mit potenziell inkonsistenten Daten arbeiten. Wenn die Antwort ja lautet und Sie bei MongoDB bleiben möchten, sehen Sie sich das Entwurfsmuster auf Zwei-Phasen-Commits .