Home > Back-end >  Mongoose findByIdAndUpdate method not incrementing document value
Mongoose findByIdAndUpdate method not incrementing document value

Time:01-13

I am trying to update the like count of job posts in my application using the $inc operator and the findByIdAndUpdate method from Mongoose. The correct document is being retrieved and returned but the like count for the job post never moves up from 0 and no updates are performed in the database collection.

Below is the code I am currently using to perform the update.

Jobs.findByIdAndUpdate(req.params._id , { $inc: {likes: 1}} , {new: true})
.then((ret) => {
    res.send(ret)
})

Job schema

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
    },
} , {collection: 'jobs'});

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

Any insight into what is preventing the update from performing would be greatly appreciated

I have tried using two queries, one to retrieve the current likes of a post and another to manually update the doc with the incremented value. I have tried nesting the queries using .then() statements and have also tried the updateOne() and findOneAndUpdate() methods as alternatives. I have tried experimenting with the $set and $inc operators in my queries to see if either of them perform the changes, but neither do.

I am expecting the incremented 'likes' value to be reflected in the database and for the updated job document to be returned and echoed back to the console.

CodePudding user response:

Your schema is missing a likes field, which means Mongoose will remove it from queries/updates (since it doesn't match the schema). Make sure to add it:

likes: {
  type: Number,
  default: 0
}

CodePudding user response:

Can you try something like this (adding [] around update):

Jobs.findByIdAndUpdate(req.params._id , [{ $inc: {likes: 1}}] , {new: true})
.then((ret) => {
    res.send(ret)
})

EDITED:

Jobs.findByIdAndUpdate(req.params._id , [{ $set: {likes: "$likes" 1}}] , {new: true})
.then((ret) => {
    res.send(ret)
})
  • Related