Дублирует при использовании PyMon go update_one () - PullRequest
0 голосов
/ 07 марта 2020

Я создаю базовый c RESTFUL API с использованием flask_restful и python3.

from flask import Flask
from flask_restful import Api, Resource
from pymongo import MongoClient

app = Flask(__name__)
api = Api(app)

client = MongoClient('mongodb+srv://xxx:password@fm-nz8t3.mongodb.net/test?retryWrites'
                     '=true&w=majority')

db = client['ERP']
users = db['users']


class Visit(Resource):
    @staticmethod
    def get():
        user_count = int(users.find_one({})['users'])
        new_count = user_count + 1
        new_id = db.users.update_one({'users': user_count}, {'$set': {'users': new_count}})
        return 'User ID: {}'.format(new_count)


api.add_resource(Visit, '/')

Идея состоит в том, чтобы подсчитать, сколько пользователей «посетили» мой сайт. Я делаю это, просто увеличивая переменную, основываясь на предыдущей user_count.

Моя проблема состоит в том, что мое поле users увеличивается на two, а не one, всякий раз, когда я получаю доступ к своему REST API на localhost 127.0.0.1:5000.

Если я запускаю это напрямую:

from flask import Flask
from flask_restful import Api, Resource
from pymongo import MongoClient

app = Flask(__name__)

client = MongoClient('mongodb+srv://xxx:password@fm-nz8t3.mongodb.net/test?retryWrites'
                     '=true&w=majority')

db = client['ERP']
users = db['users']
user_count = int(users.find_one({})['users'])
new_count = user_count + 1
new_id = db.users.update_one({'users': user_count}, {'$set': {'users': new_count}})

My users, поле ДЕЛАЕТ работу правильно, что увеличивает поле пользователя на единицу и НЕ два.

Есть ли что-то, чего мне не хватает при использовании наследования от Resource класса? Поскольку я думаю, что это root проблемы.

1 Ответ

0 голосов
/ 07 марта 2020

Я не смог воспроизвести вашу ошибку; но я бы посоветовал вам выполнить рефакторинг своего кода следующим образом, чтобы обновить его с помощью поля _id, что несколько безопаснее, особенно если вы ошибочно получаете более одной записи в коллекции:

from flask import Flask
from flask_restful import Api, Resource
from pymongo import MongoClient

app = Flask(__name__)
api = Api(app)

client = MongoClient() # Add in connection string as needed

db = client['ERP']
users = db['users']
users.insert_one({'users': 0})

class Visit(Resource):
    @staticmethod
    def get():
        user_record = users.find_one({})
        user_count = int(user_record.get('users'))
        new_count = user_count + 1
        db.users.update_one({'_id': user_record.get('_id')}, {'$set': {'users': new_count}})
        return 'User ID: {}'.format(new_count)

api.add_resource(Visit, '/')

app.run(host='0.0.0.0', port=5000, debug=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...