MongoDB atomare Operationen
mongodb keine Transaktionen unterstützt daher in der Anwendung Ihres Projekts, die Aufmerksamkeit auf diesen Punkt. Was auch immer das Design, die wir nicht fragen mongodb Datenintegrität zu gewährleisten.
Aber mongodb viele atomare Operationen liefert, wie ein Dokument zu speichern, ändern, löschen, etc., sind atomare Operationen.
Entweder ist dies die sogenannte atomare Operation um das Dokument zu MongoDB zu speichern oder nicht zu MongoDB gespeichert, wird das Dokument muss nicht intakt Abfrage wird nicht passieren.
Atomic-Datenmodell
Betrachten Sie das folgende Beispiel, Bücher aus der Bibliothek und Transaktionsinformationen.
In einem Beispiel veranschaulicht, wie sichergestellt werden, dass die gleichen Dokument eingebettet Feldern atomare Operationen (Update: update) Felder synchronisiert sind.
book = { _id: 123456789, title: "MongoDB: The Definitive Guide", author: [ "Kristina Chodorow", "Mike Dirolf" ], published_date: ISODate("2010-09-24"), pages: 216, language: "English", publisher_id: "oreilly", available: 3, checkout: [ { by: "joe", date: ISODate("2012-10-15") } ] }
Sie können db.collection.findAndModify () -Methode verwenden, ob mit neuen Abwicklungs- und Abrechnungsinformationen Bücher bestimmen können aktualisiert werden.
Eingebettet in den gleichen Dokument zur Verfügung und Kasse Felder, um sicherzustellen, dass diese Felder Update synchronisiert werden:
db.books.findAndModify ( { query: { _id: 123456789, available: { $gt: 0 } }, update: { $inc: { available: -1 }, $push: { checkout: { by: "abc", date: new Date() } } } } )
Atomic-Operationen häufig verwendeten Befehle
$ Set
Es wird verwendet, um einen Schlüssel zu geben und den Schlüssel zu aktualisieren, wenn der Schlüssel vorhanden ist und nicht schaffen.
{ $set : { field : value } }
$ Unset
Um einen Schlüssel zu entfernen.
{ $unset : { field : 1} }
$ Inc
$ Inc kann ein numerischer Wert des Dokuments sein Schlüssel (nur die Anforderungen der digitalen gerecht zu werden) zu erhöhen oder zu verringern Operationen.
{ $inc : { field : value } }
$ Drücken
Verbrauch:
{ $push : { field : value } }
Der Wert wird auf dem Feld hinzugefügt nach innen zu gehen, muss es sich um ein Array-Typ Feld Job sein, wenn das Feld nicht vorhanden ist, wird eine neue Array-Typ hinzugefügt.
$ PushAll
Mit $ Push, aber wenn Sie mehrere Werte in ein Array Feld anhängen.
{ $pushAll : { field : value_array } }
$ Pull
Um ein Feld aus einem Array von Wert gleich Wert löschen.
{ $pull : { field : _value } }
$ AddToSet
Addieren eines Werts in das Array, und nur dann, wenn der Wert nicht innerhalb des Arrays zu erhöhen.
$ Pop
Das erste oder das letzte Element des Arrays gelöschter
{ $pop : { field : 1 } }
$ Rename
Ändern Sie den Feldnamen
{ $rename : { old_field_name : new_field_name } }
$ Bit
Bit-Operationen, Integer-Typ
{$bit : { field : {and : 5}}}
Shift-Operator
> t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", "votes" : 7 } ] } > t.update( {'comments.by':'joe'}, {$inc:{'comments.$.votes':1}}, false, true ) > t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 4 }, { "by" : "jane", "votes" : 7 } ] }