سعيد
سعيد

Reputation: 1764

Weird behavior with mongoose Schema $inc operator

I'm working a todo app, it has projects and each project has todolistsand todoListsCount . When user creates a new todoList I want to increment the project's todoListsCount, the problem I found is that somehow after creating the first todoList the project's todoListsCount successfully increment but the new value is 2 I suppose to what I was expecting which is 2 :

let  project= null
await Project.findOneAndUpdate( 
{_id:projectId},
{ $inc:{  todoListsCount:1 }}, 
{ new: true},
(err, doc) => {
    if (err)console.log("Something wrong when updating data!");
    project =doc
}
);
       

const todoList = new TodoList({
title,
owner,
projectId,
orderInProject :  project.todoListsCount,
created_at : new Date(),
progress   : 0,
done_at :  new Date(),
todos   : [],
done    : false,
})
await todoList.save()

as you can see in the Project schema default value of todoListsCount is 0

import  mongoose  from 'mongoose'
const Schema = mongoose.Schema;

const ProjectSchema = new Schema(
    {
        /..rest of fields 

        todosCount  : {
            type  : Number ,
            required :false ,
            default: 0
        },
        todoListsCount     : {
            type  : Number ,
            required :false ,
            default: 0
        },
    }
)
export const Project =  mongoose.model('Project', ProjectSchema);

Upvotes: 0

Views: 37

Answers (1)

wrangler
wrangler

Reputation: 3576

I guess you are using both await and callback for same function, can be the culprit. Try:

let project = await Project.findOneAndUpdate( 
{_id:projectId},
{ $inc:{  todoListsCount:1 }}, 
{ new: true}).exec();

Upvotes: 1

Related Questions