我有一个这样定义的架构
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中,保存的文档中只有一个空数组
我做错了什么?
如何正确保存数据?
答案 0 :(得分:1)
这里的问题是 body.modfulldata
是一个数组,你不能像这样创建猫鼬模式对象,而是迭代数组并生成猫鼬模式对象,然后插入它们。示例:
const newmods = req.body.modfulldata.map(dataObj => {
return new ModulesModel(dataObj);
});
await ModuleModel.insertMany(newmods);