javascript - Mongoose.findOneAndUpdate() 没有创建新文档

标签 javascript node.js mongodb mean-stack

当客户端提供新的 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() 插入/更新集合中的数据。

例如。

  1. 如果集合中没有任何内容。将插入数据。
  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 创建一个单独的对象

这是我使用的代码:

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 操作,这是更好的选择
链接subdocuments

关于javascript - Mongoose.findOneAndUpdate() 没有创建新文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41258472/

相关文章:

javascript - Chrome 右键对话框吞没鼠标事件

javascript - 使用 jquery 检测 mousemove

JavaScript - 动态待办事项列表 - 编辑列表

node.js - Azure node.js SDK 的 createContainerIfNotExist 方法身份验证失败

javascript - Mongoose 无法从 MongoDB 数据库获取数据

javascript - 为什么 $(window).animate scrollTop 不起作用?

python - 在python-sell中运行python脚本时,Python OpenCv读取错误

css - 如何使用 gulp-clean-css 编写一个新的 -min.css 文件而不是默认覆盖现有的 css 源文件?

python - 皮蒙戈 : Limiting the results used to calculate the average in a pipeline

node.js - 替换文档不得包含原子运算符