Mongoose.findOneAndUpdate()不创build新文档

当客户端提供新的WEEKNUM时,mongoose.findOneAndUpdate()方法不会创build新的对象。 相反,它只是更新已经存在于集合中的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()插入/更新集合中的数据。

例如。

  1. 如果我们没有任何collections。 数据将被插入。
  2. 如果我们已经收集了以下数据。

     { 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创build单独的对象

这是我正在使用的代码:

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

要么

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

要么

在这里使用mongoose中的子文档你必须在你的模式中做改变,但是如果你执行CRUD操作
链接子文档