首页 > 解决方案 > mongoose Schema $inc 运算符的奇怪行为

问题描述

我正在开发一个待办事项应用程序,它有项目,每个项目都有todoliststodoListsCount. 当用户创建一个新的 todoList 我想增加项目todoListsCount时,我发现的问题是,在创建第一个 todoList 之后,项目todoListsCount成功地增加了,但新值是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()

正如您在项目架构中看到的默认值todoListsCount0

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);

标签: node.jsmongodbmongoose

解决方案


我猜你正在为同一个函数使用等待和回调,这可能是罪魁祸首。尝试:

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

推荐阅读