6

私は本のモデルを持っています。これがそのスキーマです

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事前保存フックをスキップする方法はありますか?

4

1 に答える 1

3

Book.update新しい価格が元の価格よりも低い場合にのみドキュメントを選択する条件で使用します。

Book.update({_id: id, lowestPrice: {$gt: price}}, {$set: {lowestPrice: price}},
    function (err, numberAffected) {
        if (numberAffected > 0) {
            // lowestPrice was updated.
        }
    }
);
于 2012-08-12T04:30:23.600 に答える