如何跳过mongoose pre-save hook?

时间:2012-08-12 03:36:35

标签: save hook mongoose middleware pre

我有一本书模型。这是它的架构

BookSchema = new Schema({
    title: String
    , lowestPrice: Number
});
BookSchema.path('title').required(true);
Bookchema.pre('save', function (next) {
    try {
        // chai.js
        expect(this.title).to.have.length.within(1, 50);
    } catch (e) {
        next(e);
    }
    next();
});

当创建书籍的商品时,如果商品的价格低于原价,我必须更新书籍的最低价格。因为我需要知道原点最低价格,我不能使用Book.update(),它会跳过预保存挂钩,但使用Book.findById(id).select('lowestPrice')来查找该书而不是更新它。问题是我不想选择title字段,因此当它出现在预保存挂钩时,TypeError发生this.title未定义。有没有办法跳过预保存挂钩?

1 个答案:

答案 0 :(得分:3)

使用Book.update条件只会在新价格低于原始价格时选择文档:

Book.update({_id: id, lowestPrice: {$gt: price}}, {$set: {lowestPrice: price}},
    function (err, numberAffected) {
        if (numberAffected > 0) {
            // lowestPrice was updated.
        }
    }
);