猫鼬 - 试图保存一组文档,只保存了空数组

时间:2021-03-17 16:03:01

标签: node.js mongodb mongoose

我有一个这样定义的架构

var PersonelModelSchema = new Schema({
  emailAddress: String,
  fullName: String
});

var ModuleModelSchema = new Schema({
  modName: String,
  personels:[PersonelModelSchema ]
});


var ModulesModelSchema=new Schema({
  modules: [ModuleModelSchema ]
});

var ModulesModel = mongoose.model('ModulesModel ', ModulesModelSchema );

这个schema用于保存其他应用发送到nodejs上的api端点的数据

json 数据包含一个数组,其中的内容我想保存为单独的文档 - 即该数组有 2 个对象,每个都需要保存为单独的文档。这就是我使用数组 if ModuleModelSchema 的原因,以便我可以获取数组中的所有对象。

发布的数据是这样的

{"modfulldata" :[{
  "modName": "example-45435q5",
  personels: [
    {
      "emailAddress": "name@example",
      "fullName": "name"
    },
    {
      "emailAddress": "name2@example",
      "fullName": "name2"
    }
  ]
},
{
  "modName": "example-f45b",
  personels: [
    {
      "emailAddress": "name3@example",
      "fullName": "name3"
    },
    {
      "emailAddress": "name4@example",
      "fullName": "name4"
    }
  
  ]
}
]}

这是我用来保存的代码

app.post('/savemd', 
    function(req,res){
        console.log(req.body.modfulldata);// the data is shown correctly here

        mongoose.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true, useFindAndModify: false, useCreateIndex: true });
        var db = mongoose.connection;
        db.on('error', console.error.bind(console, 'connection error:'));
        db.once('open', function callback () {
            console.log("open");          

        });

        var newmods=new ModulesModel (req.body.modfulldata);
        
    ModulesModel.insertMany(newmods).then(function(){
                db.close();
        });

    });

没有抛出错误。使用 console.log 语句,我可以看到请求 json 数据被正确读取。 但是在mongodb中,保存的文档中只有一个空数组

mongodb result

我做错了什么?

如何正确保存数据?

1 个答案:

答案 0 :(得分:1)

这里的问题是 body.modfulldata 是一个数组,你不能像这样创建猫鼬模式对象,而是迭代数组并生成猫鼬模式对象,然后插入它们。示例:

const newmods = req.body.modfulldata.map(dataObj => {
                  return new ModulesModel(dataObj);
                });
await ModuleModel.insertMany(newmods);
相关问题