Проблема дублирования записей в MongoDB при update_one и upsert при высоком трафике

В настоящее время я столкнулся с проблемой в моем приложении Django, интегрированном с MongoDB, особенно при работе с большим трафиком и одновременными пользователями. Несмотря на использование update_one с upsert, я наблюдаю случаи, когда в таких условиях периодически создаются двойные (иногда тройные) записи.

Ниже приведен упрощенный пример фрагмента кода, который я использую:

from pymongo import MongoClient

from rest_framework.views import APIView
from rest_framework import status
from rest_framework.response import Response

from django.conf import settings


# MongoDB connection setup
client = MongoClient(settings.MONGO_CONNECTION_URL)
db = client[settings.DATABASE_NAME]
collection = db[settings.COLLECTION_NAME]


class UserDataView(APIView):
    def post(self, request) -> Response:
        try:
            # Using update_one with upsert to handle user data updates
            collection.update_one(
                {'user_id': request.user.pk},
                {'$set': {'data': request.data["data"]}},
                upsert=True
            )
            
            # Returning a successful response with a data-related message
            return Response(
                {'message': 'User data successfully updated or created'},
                status=status.HTTP_200_OK
            )
        except KeyError as e:
            # Logging and handling potential errors
            logger.error(e)
            
            # Returning a response for a bad request with a data-related message
            return Response(
                {'message': 'Bad request. Please provide the required data'},
                status=status.HTTP_400_BAD_REQUEST
            )

Даже при использовании опции upsert=True спорадически создаются дубликаты записей, и, похоже, это происходит в периоды высокого трафика и одновременной активности пользователей.

Я убедился, что user_id правильно установлен в качестве уникального идентификатора, и в журналах MongoDB нет видимых ошибок. Такое поведение сложно воспроизвести, что затрудняет выявление первопричины.

Есть ли какие-либо соображения или лучшие практики, о которых я должен знать при использовании update_one с upsert в сценариях с высоким трафиком и одновременными пользователями? Любые соображения о том, как решить эту проблему или устранить неполадки, будут высоко оценены.

Вернуться на верх