Mettre à jour avec upsert=true
peut être utilisé pour effectuer une "insertion ou mise à jour" atomique (http://docs.mongodb.org/manual/core/update/#update-operations-with-the-upsert-flag
).
Par exemple, si nous voulons nous assurer qu'un document dans la collection Front avec une url
spécifique est inséré exactement une fois, nous pourrions exécuter quelque chose comme :
db.Front.update(
{url: 'http://example.com'},
{$set: {
url: 'http://example.com'},
found: true
}
)
Les opérations sur un seul document dans MongoDB sont toujours atomiques. Si vous effectuez des mises à jour qui s'étendent sur plusieurs documents, aucune atomicité n'est garantie. Dans de tels cas, vous pouvez vous demander :ai-je vraiment besoin que les opérations soient atomiques ? Si la réponse est non, vous vous débrouillerez probablement avec des données potentiellement incohérentes. Si la réponse est oui et que vous souhaitez vous en tenir à MongoDB, consultez le modèle de conception sur Commits en deux phases .