我想傳遞一個參數預先保存在貓鼬模型像中間件:貓鼬 - 參數傳遞到預先保存 - 在更新不工作保存
subject.save({ user: 'foo', correlationId: 'j3nd75hf...' }, function (err, subject, count) {
...
});
它被傳遞到兩個預先保存中間件
第一:
schema.pre('save', function (next) {
// do stuff to model
if (arguments.length > 1)
next.apply(this, Array.prototype.slice.call(arguments, 1));
else
next();
});
然後:
schema.pre('save', function(next, metadata, callback) {
// ...
// create history doc with metadata
// ...
history.save(function(err, doc) {
if(err) throw err;
if (typeof metadata == 'object')
next(callback);
else
next();
});
});
它不能保存從db中獲取的現有模型,但它在新創建的模型上工作。
它確實工作,如果我刪除參數。
所以,如果我叫......
subject.save(function (err, subject, count) {
...
});
...它的工作。
看起來回調從來沒有真正的回調。所以也許它假設第一個參數是save()更新的回調。
對於創造,它與傳遞參數
(new models.Subject(subjectInfo)).save({ user: user, correlation_id: correlationId }, function (err, subject, count) {
if (err) throw err;
...
});
爲什麼它爲保存()上創建的任何工作思路,但不保存()上更新?
謝謝!
這隻適用於Model.update,findByIdAndUpdate,findOneAndUpdate,findOneAndRemove,findByIdAndRemove。我打電話save()。它也可以工作,調用所有中間件,當傳遞的參數被刪除時 –
嗯......我明白你現在要問什麼。你可以分享你的代碼的「創建」部分嗎?根據貓鼬的說法,建議的意思是保存,創建和更新的想法都有不同的含義。當你說「更新」時,大多數人會想到MongoDB的本地更新命令。這是我的困惑的根源 – srquinn
葉普,我只是在精神上把它分解爲一個CRUD操作。我假設當一個模型/文檔不是新的(!isNew)時,它確實使用了mongodb update()調用,但是使用save()使用了鉤子。對於創建vs更新,save()上的鉤子可能連接不同嗎? –