Opérations atomiques MongoDB
Mongodb ne prend pas en charge les transactions, veuillez donc y prêter attention lorsque vous l'appliquez dans votre projet. Quelle que soit la conception, n'exigez pas que MongoDB garantisse l'intégrité des données.
Mais mongodb fournit de nombreuses opérations atomiques, telles que la sauvegarde, la modification, la suppression de documents, etc., qui sont toutes des opérations atomiques.
L'opération dite atomique signifie que soit le document est enregistré sur Mongodb, soit il n'est pas enregistré sur Mongodb. Il n'y aura aucune situation où le document interrogé n'est pas complètement enregistré.
Modèle de données d'exploitation atomique
Considérez l'exemple suivant de livres de bibliothèque et d'informations de paiement.
Cet exemple illustre comment garantir que les champs incorporés associés aux opérations atomiques (update: update) sont synchronisés dans le même document.
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") } ] }
Vous pouvez utiliser la méthode db.collection.findAndModify() pour déterminer si un livre peut être réglé et mettre à jour les nouvelles informations de règlement.
Intégrez les champs disponibles et d'extraction dans le même document pour garantir que ces champs sont mis à jour de manière synchrone :
db.books.findAndModify ( { query: { _id: 123456789, available: { $gt: 0 } }, update: { $inc: { available: -1 }, $push: { checkout: { by: "abc", date: new Date() } } } } )
Commandes communes pour les opérations atomiques
$set
est utilisé pour spécifier une clé et mettre à jour la valeur de la clé. Si la clé n'existe pas, créez-la.
{ $set : { field : value } }
$unset
est utilisé pour supprimer une clé.
{ $unset : { field : 1} }
$inc
$inc peut augmenter ou diminuer une clé dans le document dont la valeur est numérique (ne peut être qu'un nombre qui répond aux exigences).
{ $inc : { field : value } }
$push
Utilisation :
{ $push : { field : value } }
Ajouter une valeur au champ Le champ doit être de type tableau Si le champ n'existe pas, un nouveau tableau sera ajouté. Type ajouté. .
$pushAll
Identique à $push, sauf que plusieurs valeurs peuvent être ajoutées à un champ de tableau à la fois.
{ $pushAll : { field : value_array } }
$pull
Supprime une valeur égale à value du champ du tableau.
{ $pull : { field : _value } }
$addToSet
Ajoute une valeur au tableau et ne l'ajoute que si la valeur n'est pas dans le tableau.
$pop
Supprimer le premier ou le dernier élément du tableau
{ $pop : { field : 1 } }
$rename
Modifier le nom du champ
{ $rename : { old_field_name : new_field_name } }
$ bit
opération de bit, type entier
{$bit : { field : {and : 5}}}
opérateur de décalage
> 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 } ] }