我想要做的是定義一個名爲「調度」的字段,其中包含一個調度實例數組的字段,但我不希望調度模型能夠保存到它自己的集合。有沒有辦法在沒有.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