MongoDB атомарные операции
MongoDB не поддерживает транзакции, поэтому, в применении вашего проекта, обратите внимание на этот момент. Вне зависимости от конструкции, мы не просим MongoDB обеспечения целостности данных.
Но MongoDB предоставляет множество атомарных операций, таких как сохранение документа, изменять, удалять и т.д., являются атомарные операции.
Либо это так называемая атомарной операцией, чтобы сохранить документ в MongoDB, или не будут сохранены в MongoDB, документ не имеет для запроса нетронутыми не будет.
Атомная модель данных
Рассмотрим следующий пример, в библиотеке книги и информацию о транзакции.
В одном примере показано, как обеспечить, чтобы тот же документ вкладывается поля, связанные атомарные операции (обновление: обновление) полей синхронизированы.
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") } ] }
Вы можете использовать метод db.collection.findAndModify (), чтобы определить, может ли книги обновляться с новой расчетно-платежной информации.
Встроенный в том же документе доступны и кассовых полей, чтобы обеспечить эти поля будут синхронизированы обновления:
db.books.findAndModify ( { query: { _id: 123456789, available: { $gt: 0 } }, update: { $inc: { available: -1 }, $push: { checkout: { by: "abc", date: new Date() } } } } )
Атомарные операции часто используемые команды
$ Set
Он используется для указания ключа и обновить ключ, если ключ не существует, и создать.
{ $set : { field : value } }
$ Unset
Чтобы удалить ключ.
{ $unset : { field : 1} }
$ Inc
$ Inc может быть числовое значение документа (только для удовлетворения требований цифровых) клавиш для увеличения или уменьшения операций.
{ $inc : { field : value } }
$ Нажмите
Использование:
{ $push : { field : value } }
Добавляется в поле значение, чтобы войти внутрь, оно должно быть поле задания тип массива, если поле не существует, добавлен новый тип массива.
$ PushAll
С $ толчке, но как только вы можете добавить несколько значений в поле массива.
{ $pushAll : { field : value_array } }
$ Прицепные
Чтобы удалить поле из массива значение, равное значению.
{ $pull : { field : _value } }
$ AddToSet
Добавление значения в массив, и только тогда, когда значение не находится в пределах массива, чтобы увеличить.
$ Pop
Первый или последний элемент массива удаляется
{ $pop : { field : 1 } }
$ Rename
Изменить имя поля
{ $rename : { old_field_name : new_field_name } }
$ Bit
Битовые операции, целый тип
{$bit : { field : {and : 5}}}
оператор сдвига
> 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 } ] }