node.js - 猫鼬 - 试图保存一个文档数组,只保存了空数组
问题描述
我有一个这样定义的架构
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 );
此模式用于将另一个应用程序发送的数据保存到基于 nodejs 构建的 api 端点
json 数据包含一个数组,我想将其内容保存为单独的文档 - 即该数组有 2 个对象,每个对象都需要保存为单独的文档。这就是我在 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中,保存的文档中只有一个空数组
我究竟做错了什么?
如何正确保存数据?
解决方案
这里的问题body.modfulldata
是一个数组,你根本不能像这样创建猫鼬模式对象,而是迭代数组并生成猫鼬模式对象,然后插入它们。例子:
const newmods = req.body.modfulldata.map(dataObj => {
return new ModulesModel(dataObj);
});
await ModuleModel.insertMany(newmods);
推荐阅读
- python - 如何在 tkinter 下拉列表中放置函数?
- python - 使用 python 的 plotly cloropleth 绘制 GeoJSON 问题
- applescript - Applescript使用预览将文件夹中的所有文件导出为pdf
- algorithm - 是否有一种快速的概率算法来计算用户之间的相互事物的数量?
- nest-device-access - 为 master 项目使用嵌套设备访问控制台
- c# - Azure 函数对象返回未返回正确的嵌套值
- c# - 根据提供的路径重定向到操作不起作用
- javascript - HTML 画布线条颜色不准确
- python - 如何从数据框列表中创建单独的数据框?例如 df1 = df[0]
- powerbi - Power BI Report Builder 在设计报表后尝试运行时冻结