Javascript Mongoose.findOneAndUpdate()未创建新文档

Javascript Mongoose.findOneAndUpdate()未创建新文档,javascript,node.js,mongodb,mean-stack,Javascript,Node.js,Mongodb,Mean Stack,当客户端提供新的WEEKNUM时,mongoose.findOneAndUpdate()方法不会创建新对象。相反,它只是更新集合中已经存在的WEEKNUM和WEEKDATA。我怎样才能解决这个问题?我错过了什么 模式: { ageGroup:String, monthData: [{ month:String, circleTimeWordsList:[String], circleTimeTips:[String], weekData : [{

当客户端提供新的WEEKNUM时,mongoose.findOneAndUpdate()方法不会创建新对象。相反,它只是更新集合中已经存在的WEEKNUM和WEEKDATA。我怎样才能解决这个问题?我错过了什么

模式:

{
    ageGroup:String,
    monthData: [{
    month:String,
    circleTimeWordsList:[String],
    circleTimeTips:[String],

    weekData : [{
        weekNum : String,
        theme   : String,

        dayData: [{
            day:String,
            circleTimeSong: String,
            circleTimeBook: String,
            circleTimeActivity: String,

            learningCenter: [{
                learningCenterName:String,
                learningCenterActivity:String 
            }]
        }]
    }]
}]
}
这是我的模式。我正在使用mongoose.findOneAndUpdate()插入/更新集合中的数据

{
    ageGroup:"2",
    monthData: {
    month:"January",
    circleTimeWordsList:["word 1", "word 2"],
    circleTimeTips:["teaching tips", "teaching tips 2"],

    weekData : {
        weekNum : "1",
        theme   : "circleTime theme weekly 1",

        dayData: [{
            day:"Monday",
            circleTimeSong: "circleTimeSong 1", 
            circleTimeBook: "english 1", 
            circleTimeActivity: "circleTimeActivity 1", 

            learningCenter: [{
                learningCenterName:"Art Center",
                learningCenterActivity:"learningCenterActivity 1" 
            },
            {
                learningCenterName:"Language Center",
                learningCenterActivity:"learningCenterActivity 1"
            }]
        }]
    }
}
例如

  • 如果我们没有收藏。将插入数据
  • 如果集合中已经有以下数据

    {
        ageGroup:"2",
        monthData: {
        month:"January",
        circleTimeWordsList:["word 1", "word 2"],
        circleTimeTips:["teaching tips", "teaching tips 2"],
    
        weekData : {
            weekNum : "1",
            theme   : "circleTime theme weekly 1",
    
            dayData: [{
                day:"Monday",
                circleTimeSong: "circleTimeSong 1", 
                circleTimeBook: "english 1", 
                circleTimeActivity: "circleTimeActivity 1", 
    
                learningCenter: [{
                    learningCenterName:"Art Center",
                    learningCenterActivity:"learningCenterActivity 1" 
                },
                {
                    learningCenterName:"Language Center",
                    learningCenterActivity:"learningCenterActivity 1"
                }]
            }]
        }
    }
    
    }

  • 如果客户端向服务器发送以下JSON

    {
            ageGroup:"2",
            monthData: {
            month:"January",
            circleTimeWordsList:["word 1", "word 2"],
            circleTimeTips:["teaching tips", "teaching tips 2"],
    
            weekData : {
                weekNum : "2",
                theme   : "circleTime theme weekly 2",
    
                dayData: [{
                    day:"Monday",
                    circleTimeSong: "circleTimeSong 2", 
                    circleTimeBook: "english 2", 
                    circleTimeActivity: "circleTimeActivity 2", 
    
                    learningCenter: [{
                        learningCenterName:"Art Center",
                        learningCenterActivity:"learningCenterActivity 2" 
                    },
                    {
                        learningCenterName:"Language Center",
                        learningCenterActivity:"learningCenterActivity 2"
                    }]
                }]
            }
        }
    }
    
    mongodb集合将如下所示:

    {
            ageGroup:"2",
            monthData: {
            month:"January",
            circleTimeWordsList:["word 1", "word 2"],
            circleTimeTips:["teaching tips", "teaching tips 2"],
    
            weekData : [
                    {
                        weekNum : "1",
                        theme   : "circleTime theme weekly 1",
    
                        dayData: [{
                            day:"Monday",
                            circleTimeSong: "circleTimeSong 1", 
                            circleTimeBook: "english 1", 
                            circleTimeActivity: "circleTimeActivity 1", 
    
                            learningCenter: [{
                                learningCenterName:"Art Center",
                                learningCenterActivity:"learningCenterActivity 1" 
                            },
                            {
                                learningCenterName:"Language Center",
                                learningCenterActivity:"learningCenterActivity 1"
                        }]
                    },
    
                    {
                        weekNum : "2",
                        theme   : "circleTime theme weekly 2",
    
                        dayData: [{
                            day:"Monday",
                            circleTimeSong: "circleTimeSong 2", 
                            circleTimeBook: "english 2", 
                            circleTimeActivity: "circleTimeActivity 2", 
    
                            learningCenter: [{
                                learningCenterName:"Art Center",
                                learningCenterActivity:"learningCenterActivity 2" 
                            },
                            {
                                learningCenterName:"Language Center",
                                learningCenterActivity:"learningCenterActivity 2"
                            }]
                        }]
                    }
                ]
            }
        }
    }
    
    但是,当前代码只是更新旧数据,而不是在WEEKDATA数组中为weekNUM 2创建单独的对象

    这是我正在使用的代码:

    MyData.getMyDataModelObject().findOneAndUpdate({ageGroup:data.ageGroup, month:data.monthData.month/*, weekNum:data.monthData.weekData.weekNum*/}, data, {upsert:true}, function(err, foundData){});
    

    假设请求是在体内发出的

    var data=req.body;
    delete data.weekData;
    findOneAndUpdate(query,data,function(err,model){
      if(err){
    // handle here
        }
     model.monthData.weekData.push(req.body.weekData);
     model.save();
    });
    

    在这种情况下,在mongoose中使用子文档必须在UR模式中进行更改,但如果UR执行CRUD操作,则是更好的选择

    链接更新整个文档。显然,您需要添加或更新子文档。请阅读此处:。如果您需要经常执行此类更新,那么重新设计您的模式可能是值得的。