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

时间:2016-02-16 02:50:08

标签: node.js mongodb mongoose schema

我目前有一个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' }]

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

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');
    }
})

2 个答案:

答案 0 :(得分:3)

我建议您设置这样的架构:

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创建新计划之前,您可能希望放入如下所示的行:

console.log(JSON.stringify(req.body, null, 2));

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

答案 1 :(得分:0)

  1. 在架构中建立内联对象模型。
  2. 使用此:

    var model = mongoose.model("CollectionName",SchemaName);
    model.insertMany(arrayOfSchedules , function(err,docs){});