2

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

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

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()

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

有没有办法为 Schedule 禁用 save()?有正确的方法吗?

我可能会坚持我所拥有的,或者满足于混合类型但在验证上失败了..

4

1 回答 1

0

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

.save此外,在您的模型上禁用方法也没有真正的理由Schedule(这是一个有趣的功能,它允许您将Schedule模型同时用作嵌入式文档的模型和独立文档的模型)。只是不要使用它。做这样的事情:

var student = new Student({ firstName: 'John' });
var schedule = new Schedule({ day: 3, time: 15 });
student.schedules.push( schedule );
student.save( );
于 2012-08-02T08:25:50.297 回答