Node.js mongoose模式$inc运算符的奇怪行为

Node.js mongoose模式$inc运算符的奇怪行为,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在开发一个todo应用程序,它有项目,每个项目都有todolists和todoListScont。 当用户创建一个新的todoList时,我想增加项目的ToDoListScont,我发现的问题是,在创建第一个todoList后,项目的ToDoListScont成功地增加了,但新值是2,我假设是我所期望的2: let project= null await Project.findOneAndUpdate( {_id:projectId}, { $inc:{ todoListsCount

我正在开发一个todo应用程序,它有项目,每个项目都有
todolists
todoListScont
。 当用户创建一个新的todoList时,我想增加项目的
ToDoListScont
,我发现的问题是,在创建第一个todoList后,项目的
ToDoListScont
成功地增加了,但新值是
2
,我假设是我所期望的
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()
正如您在项目架构中看到的,
todoListsCount
的默认值是
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);


我猜您对同一个函数同时使用了wait和callback,这可能是罪魁祸首。尝试:

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

检查更新函数是否被调用两次,您可以在模式中临时创建一个数组字段,并在调用更新函数时推送任何临时值。最终的数组长度(以db为单位)是您更新函数的调用次数。令人惊讶的是,这解决了它,谢谢