mongodb CastError:模型“Stocks”的路径“_id”处的值“1”(类型字符串)转换为ObjectId失败

laik7k3q  于 2023-02-11  发布在  Go
关注(0)|答案(1)|浏览(140)

我尝试使用mongoose的updateOne函数编辑整个表单,但每当我单击编辑按钮时,它都显示错误CastError:对于模型“Stocks”,路径“_id”处的值“1”(类型字符串),转换为ObjectId失败。

计数器.js

const counterSchema = {
    id: {
        type: String
    },
    
    seq: {
        type: Number
    }
}

股票.js

const stockSchema = new Schema({
    id: {
        type: Number
    },
    flowerName: {
        type: String,
        required: true
    }
    },{timestamps: true }
);

这是从我的post方法,我添加一个值的形式

Counter.findOneAndUpdate(
        {id: "autoval"}, 
        {"$inc":{"seq": 1}}, 
        {new: true}, (err, cd) => {

            let seqID;
            if(cd==null) {
                const newValue = new Counter({id: "autoval", seq:1})
                newValue.save() 
                seqID = 1
            } else { 
                seqID = cd.seq
            }

            const qty = Number(req.body.quantity)
            const price = Number(req.body.pricePieces)
           
            const stock = new Stocks ({
                id: seqID,
                flowerName: req.body.flowerName
            })
            stock.save()
                .then(result => {
                    res.redirect('flowers-in-stock');
                }).catch(err => console.log(err));
        }
    )

我想在编辑页面继续

Stocks.findById(req.params.id)
        .then (stock => {
            res.render('flowers-in-stock-edit', {stocks: stock})
        }).catch(err => console.log(err));
}
bhmjp9jg

bhmjp9jg1#

findById函数将其参数与MongoDB文档中的_id字段进行匹配。
您的模式定义了id,但没有定义_id,因此_id将在插入时自动创建,并且类型为ObjectId。
findById尝试强制转换其参数以匹配_id字段的数据类型。错误消息指示您传递的是"1"作为要查找的值,而findById尝试将该值强制转换为ObjectId。"1"不是有效的ObjectId,因此操作失败。
要基于id字段进行搜索,请使用findOne而不是findById

Stocks.findOne({id: req.params.id})

相关问题