我需要从帖子中间获取文档ID,但有时在findAndUpdate时它不存在。
任何人都知道为什么?
const mongoose = require('mongoose'),
Schema = mongoose.Schema,
ShiftSchema = new Schema({
_id: { type: String, 'default': shortid.generate},
creator_id: { type: String, required: true },
project_id: { type: String, required: true }
}),
_ = require('underscore');
var when_to_notify = ['save', 'findByIdAndUpdate', 'findOneAndUpdate', 'findByIdAndUpdate'];
_.each(when_to_notify, function(pre_func) {
ShiftSchema.post(pre_func, function() {
otherFunc(this);
});
})
function otherFunc(self) {
doSomethingWith(self._id)
// typeof self._id == 'undefined' == true
}
答案 0 :(得分:1)
中间件文档和查询功能仅支持一组特定功能。
文档中间件支持:
查询中间件支持这些模型和查询功能:
另一个因素可能是:
查询中间件与文档中间件的区别在于微妙但是 重要的方法:在文档中间件中,这是指文档 正在更新。在查询中间件中,mongoose不一定有 对正在更新的文档的引用,因此这是指查询 对象而不是正在更新的文档。
在您的示例中,您将查询和文档中间件混合使用相同的功能,因此上下文将有所不同。文档中间件签名实际上采用了文档参数:
schema.post('save', function(doc) {
console.log('%s has been saved', doc._id);
});