如何设置 Mongoose 模式以在 MongoDB 中存储对象数组?
Posted
技术标签:
【中文标题】如何设置 Mongoose 模式以在 MongoDB 中存储对象数组?【英文标题】:How to set up Mongoose schema to store an array of objects in MongoDB? 【发布时间】:2016-05-27 03:43:52 【问题描述】:我目前有一个array
,其中包含多个嵌套在其中的objects
。
这是格式...
[ id: 1, title: 'Squats', video: 'https://www.youtube.com/watch?v=aPYCiuiB4PA' , id: 2, title: 'Push-Ups',video: 'https://www.youtube.com/watch?v=aPYCiuiB4PA' ]
我正在尝试在我的 Schedule
模型中 .save()
它看起来像这样......
var ScheduleSchema = new mongoose.Schema(
schedule: [Object]
)
当我在服务器端的 Schedule
控制器中运行以下代码时,.save()
函数给了我一个“成功”消息(我对其进行了编程),但是当我查看我的 MongoDB
数据库,它保存不正确,schedule
数组内没有任何内容。
这是数据库中保存的信息的样子....
"_id" : ObjectId("56c28a0d4c92bec03408c077"), "schedule" : [ ], "__v" : 0
我感觉我的模型设置错误。
我尝试过的模型架构...
1) schedule: []
2)schedule: [Schema.Types.Mixed]
以防万一,这是我的 .save()
函数,当我尝试从计划控制器中保存所述数据时...
var new_schedule = new Schedule(req.body.info);
new_schedule.save(function(err)
if(err)
console.log('err');
else
console.log('worked');
)
【问题讨论】:
真的不清楚你的意图。 “我有一个包含多个对象的数组..”。好的,在哪里?它是否在文本文件中作为 JSON 格式的字符串?您是否在内存中创建了此对象?这是其他功能的结果吗?那么当然你打算为存储做什么?这些是单独的文件吗?这些不是包含在单个文档中的数组的成员吗?您是否甚至意识到“架构”是指文档中定义的字段的标准结构。这里提出了这么多问题,而您似乎只看了一眼文档。 【参考方案1】:我建议像这样设置您的架构:
var ScheduleSchema = new mongoose.Schema(
schedule: [mongoose.Schema.Types.Mixed]
);
这将是设置它的正确方法。另一种方法是内联定义对象,如下所示:
var ScheduleSchema = new mongoose.Schema(
schedule: [
id: type: Number, default: 1 ,
title: type: String, default: '', trim: true ,
video: type: String, default: '', trim: true
]
);
另外,服务器端代码可能不是问题。在使用 req.body.info 创建新的 Schedule 之前,您可能需要输入如下一行:
console.log(JSON.stringify(req.body, null, 2));
这将以可读的格式打印出 req.body 对象,以便您可以确保客户端应用正在发送您认为您正在获取的信息。
【讨论】:
嘿。感谢您的答复。在花时间查看 Mongoose 文档之后,您的第一个解决方案就是我所追求的。不幸的是,这并没有奏效。您的其他解决方案也不起作用,因为并非数组中的所有对象都具有相同的属性。这就是我首先选择Mixed
模式的原因。真是令人难以置信……
啊哈!好的,所以到目前为止我使用的所有模型基本上都是完全有效的。你提供的一切也是有效的。我遇到的问题实际上是在我的服务器端控制器中...... var new_schedule = new Schedule(req.body.info);
注意到有什么可疑的吗?创建新计划时,我没有包含 schedule
键。我应该看起来像这样...... var new_schedule = new Schedule(schedule: req.body.info);
不过,你明白了为我的模型问题提供正确答案的意义。谢谢!
嗯,我们走了。很高兴我的回答有帮助。这就是我建议使用 console.log 的原因 - 它准确地向您展示了您正在使用的内容。【参考方案2】:
-
在架构中创建内联对象的模型。
使用这个:
var model = mongoose.model("CollectionName",SchemaName);
model.insertMany(arrayOfSchedules , function(err,docs));
【讨论】:
以上是关于如何设置 Mongoose 模式以在 MongoDB 中存储对象数组?的主要内容,如果未能解决你的问题,请参考以下文章
设置 Mongoose 模式进行身份验证后,如何使用 Mongodb 查询数据库?
如何使用 vscode 设置 jest typescript 测试以在调试模式下运行