有没有一种方法来定义一个没有.save()方法的mongoose模型?

我想要做的是定义一个名为“日程安排”,其中包含一个日程安排实例数组字段的学生模型,但我不希望日程安排模型能够保存到它自己的集合。

这里有一些代码,它会更有意义:

var ScheduleSchema = new Schema({ day: {type: Number, min: 0, max: 6}, time: {type: Number, min: 0, max:24} }); var StudentSchema = new Schema({ firstName: String, schedule: [ScheduleSchema] }); var Schedule = mongoose.model("Schedule", ScheduleSchema); var Student = mongoose.model(modelName, StudentSchema); Student.Schedule = Schedule; 

我有这个代码的问题是,当我这样做:

 var schedule = new Student.Schedule({day: 3, time: 15}); 

我会得到这样的东西,当我console.log

 { "day" : 3, "time" : 15, "_id" : ObjectId("5019f34924ee03e20900001a") } 

我绕过了_id的自动生成,通过在模式中明确定义_id,

 var ScheduleSchema = new Schema({ _id: ObjectIdSchema, day: {type: Number, min: 0, max: 6}, time: {type: Number, min: 0, max:24} }); 

现在它只是给了我:

 { "day" : 3, "time" : 15} 

这可能是一个黑客..而不是我想依靠的东西。

另一个问题是,如果我这样做

 schedule.save() 

它实际上会创build一个集合并将文档保存到数据库。

有没有一种方法来禁用调度save()? 有没有一个正确的方法来做到这一点?

我可以坚持我所拥有的,或者解决混合types,但失去validation..

你为什么要做schedule.save()呢? 你应该保存父对象(即Student对象),而不是embedded文档。 如果你保存schedule那么默认会附加_id 。 如果将作为embedded文档的schedule保存为Student对象,则不会发生这种情况。

Schedule模型中禁用.save方法也没有真正的原因(这是一个有趣的function,它允许您将Schedule模型同时作为embedded式文档的模型和独立文档的模型)。 只是不要使用它。 做这样的事情:

 var student = new Student({ firstName: 'John' }); var schedule = new Schedule({ day: 3, time: 15 }); student.schedules.push( schedule ); student.save( );