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()插入/更新集合中的数据。
例如。
- 如果我们没有任何collections。 数据将被插入。
-
如果我们已经收集了以下数据。
{ 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操作
链接子文档