有没有一种方法来定义一个没有.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( );