mongodb - bson.errors.InvalidId : '_id' is not a valid ObjectId, 它必须是 12 字节输入或 24 字符十六进制字符串

标签 mongodb pymongo

@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/

相关文章:

java - Matlab通过Java驱动程序从MongoDB集合中删除所有文档

mongodb - 从 mongodb 中提取嵌套结构数据

python - 如何使用 PyMongo 将索引从一个集合复制到另一个集合?

python - mongodb查询时间太长

python - 使用 pymongo 在引用/链接的 MongoDB 文档中查找

mongodb - 在 Jersey API-REST 中响应 mongodb objectDB

mongodb - 如何查询包含嵌套数组子集的 mongo 文档

node.js - 如何在 Mongoose 中更新?

Mongodb 读取首选项

python - 使用 pymongo 读取和更新 mongodb 文档的最佳方法