bson.errors.InvalidId: '_id' 不是有效的 ObjectId,它必须是 12 字节的输入或 24 字符的十六进制字符串

bson.errors.InvalidId: '_id' is not a valid ObjectId, it must be a 12-byte input or a 24-character hex string

@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 product_id 是 mongodb
中某些产品的 _id 例如:
id_product = 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")

在这段代码中,我尝试将字符串转换为字节但不起作用
错误:
TypeError: 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"
})