我有3個模式,其中2個模塊有.pre('save')
掛鉤將其推入前一個模式。你可以採取與主題,問題的論壇的例子和評論貓鼬模式檢查是否第一次保存模型實例
var topicSchema = new Schema({
arr: {type:[Schema.ObjectId], ref:'Question'},
});
var Topic = new mongoose.model('Topic', topicSchema);
var questionSchema = new Schema({
targetId: {type:Schema.ObjectId, ref:'Topic', required:true},
arr: {type:[Schema.ObjectId], ref:'Comment'},
});
var Question = new mongoose.model('Question', questionSchema);
var commentSchema = new Schema({
targetId: {type:Schema.ObjectId, ref:'Question', required:true},
});
var Comment = new mongoose.model('Comment', commentSchema);
現在對於上面的架構我想:如果我救一個問題,我想自動推送問題的_id
其各自Topic.arr
,當我保存自動評論推動其它各自Question.arr
我試圖解決這個使用.pre('save')
掛鉤如下:
function addPreSave (schema, idProperty, containerProperty) {
var modelName = schema.paths[idProperty].options.ref;
var model = mongoose.models[modelName];
schema.pre('save', function (next) {
model.findById(this[idProperty], function (err, doc) {
doc[containerProperty].push(this._id);
doc.save(next);
}.bind(this));
});
}
addPreSave(questionSchema, 'targetId', 'arr');
addPreSave(commentSchema, 'targetId', 'arr');
所有這些上述功能(以及2次調用)是爲兩個模式中的每一個添加一個.pre('save')
掛鉤,以將它們的_id
添加到它們各自的父級中。
問題:的問題是,現在,每次我保存留言的時候,它會將其ID的話題,但我實際上只希望這樣做只是第一次。所以在上面的例子中,如果你創建了一個主題,然後是問題,然後是問題的評論,Topic.arr
將有2個ID(問題的_id
的兩倍),因爲它爲問題保存一次,第二次是由評論的電話觸發,以保存問題
有沒有人知道解決這個問題的方法,或者更具體地說,如果您知道如何在預保存鉤子中解決這個問題,那麼這是否是第一次保存?
可能的重複[確定如果記錄「是新的」在預存保存回調](http://stackoverflow.com/questions/12092772/determine-if-a-record-is-new-in-the- pre-save-callback) – JohnnyHK