Sobes.tech
Back to questions
Middle
58

Можно ли выполнять атомарные операции внутри нескольких документов в MongoDB?

Answer from AI

sobes.tech AI

В MongoDB атомарные операции гарантируются только на уровне одного документа. Это означает, что изменения внутри одного документа выполняются либо полностью, либо не выполняются вовсе.

Если нужно выполнить атомарные операции, затрагивающие несколько документов, то в MongoDB до версии 4.0 это было невозможно. Начиная с версии 4.0, появилась поддержка много-документных транзакций, которые позволяют выполнять атомарные операции над несколькими документами в рамках одной транзакции.

Пример использования транзакции в Python с pymongo:

from pymongo import MongoClient
client = MongoClient()
db = client.testdb

with client.start_session() as session:
    with session.start_transaction():
        db.collection1.update_one({'_id': 1}, {'$set': {'field': 'value'}}, session=session)
        db.collection2.update_one({'_id': 2}, {'$inc': {'counter': 1}}, session=session)

Таким образом, атомарность на несколько документов достигается через транзакции, начиная с MongoDB 4.0.