operazioni atomiche MongoDB
MongoDB non supporta le transazioni, di conseguenza, l'applicazione del progetto, prestare attenzione a questo punto. Qualunque sia il design, non chiediamo mongodb garantire l'integrità dei dati.
Ma MongoDB offre molte operazioni atomiche, come il salvataggio di un documento, modificare, cancellare, ecc, sono operazioni atomiche.
O questa è la cosiddetta operazione atomica per salvare il documento in MongoDB, o meno salvato MongoDB, il documento non deve interrogare intatto non accadrà.
modello di dati atomico
Si consideri il seguente esempio, libri della biblioteca e informazioni sulle transazioni.
In un esempio illustra come garantire che gli stessi campi documento incorporato operazioni atomiche correlati: sono sincronizzati (aggiornamento) Campi.
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") } ] }
È possibile utilizzare il metodo db.collection.findAndModify () per determinare se i libri possono essere aggiornati con il nuovo insediamento e le informazioni di fatturazione.
Incorporato nello stesso documento a disposizione e nella verifica campi per garantire che questi campi sono sincronizzati aggiornamento:
db.books.findAndModify ( { query: { _id: 123456789, available: { $gt: 0 } }, update: { $inc: { available: -1 }, $push: { checkout: { by: "abc", date: new Date() } } } } )
operazioni atomiche comunemente utilizzati comandi
$ Set
Viene utilizzato per specificare una chiave e aggiornare la chiave, se la chiave non esiste e creare.
{ $set : { field : value } }
$ Unset
Per rimuovere una chiave.
{ $unset : { field : 1} }
$ Inc
$ Inc può essere un valore numerico del documento (solo per soddisfare le esigenze del digitale) tasti per aumentare o diminuire operazioni.
{ $inc : { field : value } }
$ push
Uso:
{ $push : { field : value } }
Il valore aggiunto al campo per andare dentro, deve essere un lavoro campo tipo di matrice, se il campo non esiste, un nuovo tipo di matrice aggiunto.
$ PushAll
Con $ spinta, ma una volta che è possibile aggiungere più valori in un campo di matrice.
{ $pushAll : { field : value_array } }
$ Pull
Per eliminare un campo da una matrice di valore di pari valore.
{ $pull : { field : _value } }
$ AddToSet
L'aggiunta di un valore nella matrice, e solo quando il valore non è all'interno della matrice ad aumentare.
$ Pop
Il primo o l'ultimo elemento della matrice di soppresso
{ $pop : { field : 1 } }
$ Rinomina
Modificare il nome del campo
{ $rename : { old_field_name : new_field_name } }
$ Bit
operazioni a bit, tipo intero
{$bit : { field : {and : 5}}}
operatore di spostamento
> 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 } ] }