如何设置 Mongoose 模式以在 MongoDB 中存储对象数组?

Eri*_*and 2 schema mongoose mongodb node.js

我目前有一个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' }]
Run Code Online (Sandbox Code Playgroud)

我正在.save()我的Schedule模型中尝试它看起来像这样......

var ScheduleSchema = new mongoose.Schema({
    schedule: [Object]
})
Run Code Online (Sandbox Code Playgroud)

当我Schedule在服务器端的控制器中运行以下代码时,该.save()函数给了我一个“成功”消息(我对其进行了编程),但是当我查看我的MongoDB数据库时,它错误地保存了schedule数组中没有任何内容。

这是保存的信息在数据库中的样子....

{ "_id" : ObjectId("56c28a0d4c92bec03408c077"), "schedule" : [ ], "__v" : 0 }
Run Code Online (Sandbox Code Playgroud)

我有一种感觉,我的模型设置错误。

我尝试过的模型模式...

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');
    }
})
Run Code Online (Sandbox Code Playgroud)

tut*_*ley 6

我建议像这样设置你的架构:

var ScheduleSchema = new mongoose.Schema({
    schedule: [mongoose.Schema.Types.Mixed]
});
Run Code Online (Sandbox Code Playgroud)

这将是设置它的正确方法。另一种方法是在线定义对象,如下所示:

var ScheduleSchema = new mongoose.Schema({
    schedule: [{
        id: { type: Number, default: 1 },
        title: { type: String, default: '', trim: true },
        video: { type: String, default: '', trim: true }
    }]
});
Run Code Online (Sandbox Code Playgroud)

此外,它可能不是服务器端代码的问题。在使用 req.body.info 创建新的 Schedule 之前,您可能需要添加如下一行:

console.log(JSON.stringify(req.body, null, 2));
Run Code Online (Sandbox Code Playgroud)

这将以可读格式打印出 req.body 对象,以便您可以确保客户端应用程序正在发送您认为您正在获取的信息。