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}})
Myusers
字段正确执行任务,将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)