Node.js mongoose模式$inc运算符的奇怪行为
我正在开发一个todo应用程序,它有项目,每个项目都有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
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为单位)是您更新函数的调用次数。令人惊讶的是,这解决了它,谢谢