我想要做的是定义一个名为“调度”的字段,其中包含一个调度实例数组的字段,但我不希望调度模型能够保存到它自己的集合。有没有办法在没有.save()方法的猫鼬中定义模型?
下面是一些代码,它会更有意义:
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}
这可能是个hack..and不是我想要依靠。
的另一个问题是,如果我
schedule.save()
它实际上将创建一个收集和文档保存到数据库中。
是否有一种方法来禁用调度save()?有没有一个正确的方法来做到这一点?
我大概可以坚持与我有什么,或满足于混合类型,但失去了验证..
当然,我不会做schedule.save(),因为我写了这个。我只是不希望模糊的代码能够做它不应该做的事情。你也提到'_id'不会生成,如果我确实保存在学生身上,但唯一能够得到这种行为的方式是添加'_id'hack我在ScheduleSchema中做了..除非这不是黑客,我在他们的文档中的任何地方都找不到它。 – Khon 2012-08-02 14:00:55
真的吗?目前我无法测试,但我会在几个小时内回复您。 – freakish 2012-08-02 14:02:22
是的,我写了摩卡测试。我只通过添加_id:ObjectIdSchema将测试传递给ScheduleSchema。我使用猫鼬2.7.0顺便说一句。 – Khon 2012-08-02 14:31:31