You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这条路由无法更新数据库中的数据?

问题分析与解决

你这儿的问题是调用updateOne后文档没更新,但没报错,核心原因是错误使用了Mongoose文档实例的updateOne方法。

问题出在哪

你已经通过await ApartmentsModel.findById(req.body._id)拿到了对应的apartment文档实例,这时候调用实例的updateOne根本不需要再传过滤器({ "_id": ObjectId(id)})——这个实例本身就绑定了具体的文档,你额外加的过滤器反而画蛇添足,导致更新没作用到目标文档上。

两种修正方法

方法一:直接用实例的save()(推荐,适合已经拿到实例的情况)

既然已经拿到了apartment实例,直接改它的comments属性再存回去就行:

router.post("/update", async (req,res) => {
    try {
        const apartment = await ApartmentsModel.findById(req.body._id);
        apartment.comments = req.body.comments; // 直接修改实例的comments字段
        const response = await apartment.save(); // 保存更新到数据库
        res.json(response);
    } catch (err) {
        res.json(err)
    }
});

方法二:用Model的updateOne(不用提前查实例)

如果不需要先读实例的其他数据,直接用模型的updateOne更高效,这时候才需要传过滤器:

// 先确保导入了ObjectId:const { ObjectId } = require('mongoose');
router.post("/update", async (req,res) => {
    const id = req.body._id;
    const comments = req.body.comments;

    try {
        const response = await ApartmentsModel.updateOne(
            { "_id": ObjectId(id)}, // 模型方法需要传过滤器定位文档
            { $set: { comments: comments } }
        );
        res.json(response);
    } catch (err) {
        res.json(err)
    }
});

额外说明

你之前的代码里,console.log(comments)能输出正确值,apartment实例也能正常获取,说明参数传递和查询都没问题,就是updateOne的用法错了才导致更新失效。

内容的提问来源于stack exchange,提问作者jpjp2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:35:24