2

私がやろうとしているのは、Schedule インスタンスの配列を含む「スケジュール」というフィールドを持つ Student モデルを定義することですが、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()

実際にコレクションを作成し、ドキュメントをデータベースに保存します。

スケジュールの 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 に答える