@app.route("/product/<id_product>", methods=["GET"])
def product(id_product):
params = request.args
api_key = params["APIKEY"]
if check_key(api_key):
review = reviews.find_one(ObjectId(id_product), projection= {"comments": 0, "_id": 0, "user_image":0})
product = products.find_one(ObjectId(id_product), projection= {"views": 0})
products.update_one({"_id":ObjectId(id_product)}, {"$inc":{"views": 1}})
return jsonify(product=product, reviews=review)
else:
return jsonify(ERROR="AUTHENTICATION PROBLEM USE VALID API KEY")
错误:
bson.errors.InvalidId:'626bccb9697a12204fb22ea30'不是有效的ObjectId,它必须是12字节输入或24个字符的十六进制字符串
我的代码从url获取product_id,product_id是mongodb中某些产品的_id
例如:
id_产品 = 626bccb9697a12204fb22ea30
在 mongodb 中,我的代码应该获取带有 _id = ObjectId(626bccb9697a12204fb22ea30) 的文档
我尝试了很多方法但没有任何效果!
我认为解决方案是我必须将字符串转换为字节实例
即使我尝试这样做
@app.route("/product/<id_product>", methods=["GET"])
def product(id_product):
params = request.args
api_key = params["APIKEY"]
pro= bytes(id_product , "utf-8"))
if check_key(api_key):
review = reviews.find_one(ObjectId(pro), projection= {"comments": 0, "_id": 0, "user_image":0})
product = products.find_one(ObjectId(pro), projection= {"views": 0})
products.update_one({"_id":ObjectId(pro)}, {"$inc":{"views": 1}})
return jsonify(product=product, reviews=review)
else:
return jsonify(ERROR="AUTHENTICATION PROBLEM USE VALID API KEY")
在此代码中,我尝试将字符串转换为字节,但不起作用
错误:
类型错误:id 必须是 (bytes, str, ObjectId) 的实例,而不是
预先感谢:)
最佳答案
您的objectId
有25个字符;如果你把它设置为 24 个字符,它就会起作用。
from pymongo import MongoClient
from bson import ObjectId
db = MongoClient()['mydatabase']
db.mycollection.insert_one({
"_id": ObjectId('626bccb9697a12204fb22ea3'),
"key": "value"
})
关于mongodb - bson.errors.InvalidId : '_id' is not a valid ObjectId, 它必须是 12 字节输入或 24 字符十六进制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72081511/