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

Mongoose findByIdAndUpdate无法递增文档likes值的问题求助

问题原因分析

你的代码执行后数据库点赞数无变化,核心原因是Job Schema里未定义likes字段。

Mongoose默认开启严格Schema校验,所有不在Schema中声明的字段会被自动过滤,不会写入数据库。因此你执行的$inc: {likes:1}更新操作会被Mongoose忽略,自然不会产生任何变更。

解决方案

1. 在Job Schema中添加likes字段

修改Schema定义,补充likes字段并设置合理的类型与默认值:

const mongoose = require('mongoose');

let JobSchema = mongoose.Schema({
    student_name: {
        type: String,
        required: true
    },
    subject: {
        type: String,
        required: true
    },
    grade: {
        type: Number,
        required: true
    },
    area: {
        type: String,
        required: true
    },
    desc: {
        type: String,
        required: true
    },
    accepted: {
        type: Boolean,
        required: true,
        default: false
    },
    tutor_name: {
        type: String,
        required: false
    },
    // 新增likes字段
    likes: {
        type: Number,
        default: 0 // 默认点赞数为0
    }
} , {collection: 'jobs'});

let Job = mongoose.model('Job' , JobSchema);
module.exports = Job;

2. 完善更新逻辑(可选)

修改Schema后原有更新代码即可正常运行,若需增加错误处理可补充如下:

Jobs.findByIdAndUpdate(req.params._id, { $inc: {likes: 1}}, {new: true})
.then((ret) => {
    console.log('更新后的职位文档:', ret);
    res.send(ret);
})
.catch(err => {
    console.error('点赞更新失败:', err);
    res.status(500).send('点赞更新失败');
});

额外说明

如果之前手动在数据库中添加过likes字段,由于Schema未定义,Mongoose查询返回的文档中也不会包含该字段,导致你看到的返回结果里likes始终为0(或无此字段)。只有在Schema中声明后,Mongoose才会处理该字段的读写操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:05:34