Python 使用PyMongo update_one()时重复

Python 使用PyMongo update_one()时重复,python,flask,pymongo,flask-restful,Python,Flask,Pymongo,Flask Restful,我正在使用flask\u RESTFUL和python3创建一个基本的RESTFUL API 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.ne

我正在使用
flask\u RESTFUL
python3
创建一个基本的RESTFUL API

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\u count
的基础上增加一个变量来实现这一点

我的问题是,每当我在本地主机
127.0.0.1:5000
上访问REST API时,我的
users
字段就会增加
2而不是
1

如果我直接运行它:

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
字段正确执行任务,将users字段增加1,而不是增加2


使用从
资源
类继承时,是否缺少一些内容?我认为这是问题的根源。

我无法重现你的错误;但我可能会鼓励您按照如下方式重构代码,以使用
\u 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)