<p>рдиреЗрд╡рд▓рд╛ 4.0.1: рдкреВрд░реНрд╡ "рдЕрдкрдбреЗрдЯ" рдорд┐рдбрд▓рд╡реЗрдпрд░ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ</p>

рдХреЛ рдирд┐рд░реНрдорд┐рдд 30 рдорд╛рд░реНрдЪ 2015  ┬╖  40рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Automattic/mongoose

рдирдорд╕реНрддреЗ, рдореБрдЭреЗ рдиреЗрд╡рд▓рд╛ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореИрдВ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдФрд░ рдореЛрдВрдЧреЛрд╕ 4.0.1 рдХреЗ рд╕рд╛рде рдПрдХ рдПрдкреАрдЖрдИ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рднреА рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рднреА рдореИрдВ рдирдП pre рдЕрдкрдбреЗрдЯ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рдЙрд╕реА рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдореИрдВ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП pre рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, this рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛ рд░рд╣реА рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ Query рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИред

рдореИрдВ рдЬреЛ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕рдХрд╛ рдЙрджрд╛рд╣рд░рдг:

ExerciseSchema.pre('save', function (next, done) {
        var self = this;
        console.log('exercise:', self); // returns exercise object
        // some validations here
       next();
});
ExerciseSchema.pre('update', function (next, done) {
        var self = this;
        console.log('exercise:', self); // returns Query object instead of exercise object
        // some validations here
       next();
});

рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рднреАрддрд░ рдореБрдЭреЗ this рд╕рдВрджрд░реНрдн рд╡рд╕реНрддреБ рдореЗрдВ рдпрд╣реА рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИред

{ _mongooseOptions: {},
  mongooseCollection: 
   { collection: { s: [Object] },
     opts: { bufferCommands: true, capped: false },
     name: 'exercises',
     conn: 
     ... },
   ...
}

рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЗрд╕рдХреЗ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреЛ Query рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ ./node_modules/mongoose/lib/query.js рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ:

рдХреНрдпрд╛ рдпрд╣ рдХреБрдЫ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ рдпрд╛ рдореИрдВ рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ? рд╕рдорд╛рдзрд╛рди рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗрд╡рд┐рдВрдЧ рдкрд░ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рднреАрддрд░ рд╕рддреНрдпрд╛рдкрди рдХрд░рдиреЗ рдФрд░ рдЕрджреНрдпрддрди рдХрд░рддреЗ рд╕рдордп рд╕реАрдзреЗ рдирд┐рдпрдВрддреНрд░рдХ рдкрд░ рд╕рддреНрдпрд╛рдкрди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реЛрдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред

рдпрд╣реА рдмрд╛рдд findOneAndUpdate pre рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рднреА рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕реЗ рдЦреЛрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрднреНрдпрд╛рд╕ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдФрд░ рдореЗрд░реА рдИрдорд╛рдирджрд╛рд░ рд░рд╛рдп рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдХрд┐ findAndUpdate рдФрд░ findOneAndUpdate рдкреВрд░реНрд╡ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдиреЗ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд░рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рдЦреЛрдЬ (рд╡рди) рдФрд░ рдЕрдкрдбреЗрдЯ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ред

рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдпреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдзрдиреНрдпрд╡рд╛рджред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЖрд╣ рдареАрдХ рд╣реИ, рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдЖрдк $#$ update() $#$ рдХреЗ рдмрдЬрд╛рдп findOneAndUpdate() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реБрдХ рдХреЗ рд╕рд╛рде рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдп рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдкреНрд░реА-рд╣реБрдХ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдСрдкреНрд╕ рдХреЛ findOneAndUpdate рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

schema.pre('findOneAndUpdate', function() {
  this.findOneAndUpdate({}, { $set: { key: 'value' } });
});

рд╕рднреА 40 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ - рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕рд░реНрд╡рд░ рдХреА рдореЗрдореЛрд░реА рдореЗрдВ рднреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреЗрд╡рд▓рд╛ рдХреЛ рдЕрджреНрдпрддрди () рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреЛрдЬ () рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИред

рдбрд┐рдЬрд╝рд╛рдЗрди рдЖрдкрдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреЛрдбрд╝рдХрд░ рдпрд╛ рд╣рдЯрд╛рдХрд░ рдХреНрд╡реЗрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ, рдкреИрд░рд╛рдореНрд╕, рд╡рд┐рдХрд▓реНрдк рдЖрджрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ .populate() рдХреЛ find() рдФрд░ findOne() рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдирд╛, multi: true рд╕реЗрдЯ рдХрд░рдирд╛ рдХреБрдЫ рдореЙрдбрд▓реЛрдВ, рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд▓реНрдкред

findOneAndUpdate() рдПрдХ рдорд┐рдереНрдпрд╛ рдирд╛рдо рд╣реИ, рдпрд╣ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд mongodb findAndModify рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ findOne() + update() рдЬреИрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рдЕрд▓рдЧ рдСрдкрд░реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рддрдм рдЖрдк 'рдкреНрд░реА' рдЕрдкрдбреЗрдЯ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рджреМрд░рд╛рди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдХреИрд╕реЗ рджреЗрдВрдЧреЗ?

this.update({ field: val }); рдЕрдкрдбреЗрдЯ рдСрдкрд░реЗрд╢рди рдореЗрдВ рдРрд╕рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ { $set: { field: val } } рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред

рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЗрд╕реЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ 4.0.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдореБрдЭреЗ рдХреНрд╡реЗрд░реА рдкрд░ "exec" рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИ?

рдЕрдЧрд░ рдореИрдВ this.update рдЪрд▓рд╛рддрд╛ рд╣реВрдБ рддреЛ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ http://mongoosejs.com/docs/api.html#query_Query -update?

рдореИрдВрдиреЗ рдпрд╣ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛редfindOneAndUpdate({matcher: "myvalue"}); рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред

рд╣рдореНрдо 4.0.2 рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХрд╛ рдХреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ?

рдореИрдВрдиреЗ рдЕрднреА рдХреБрдЫ рдРрд╕рд╛ рдХрд┐рдпрд╛ рд╣реИ:

var schema = mongoose.Schema({
    name: String,
    description: String,
    matcher: String,

});

var generateMatcherUpdate= function(next) {
     var matcher = "generate matcher function"
        this.update({matcher: matcher});

    next();
};

 schema.pre('update', generateMatcherUpdate);

рдЖрд╣ рдареАрдХ рд╣реИ, рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдЖрдк $#$ update() $#$ рдХреЗ рдмрдЬрд╛рдп findOneAndUpdate() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реБрдХ рдХреЗ рд╕рд╛рде рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдп рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдкреНрд░реА-рд╣реБрдХ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдСрдкреНрд╕ рдХреЛ findOneAndUpdate рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

schema.pre('findOneAndUpdate', function() {
  this.findOneAndUpdate({}, { $set: { key: 'value' } });
});

рдореИрди рдиреЗрд╡рд▓рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдШреГрдгрд╛рд╕реНрдкрдж рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдХреГрдкрдпрд╛ рдЗрд╕реЗ рд╡рд╣рд╛рдВ рд░рдЦ рд╕рдХрддрд╛ рд╣реИ?

@askdesigners рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд░рдЦрд╛ рд╣реИ?

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рддрдирд╛рд╡ рдХреЗ рдХреНрд╖рдг рдореЗрдВ :)

рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЧрддрддрд╛ рдХреА рдмрд╕ рднрдВрдЧреБрд░рддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВред рдпрд╣ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЕрдкрдирд╛ рд╕рд┐рд░ рдЦреБрдЬрд▓рд╛рддреЗ рд╣реИрдВред

рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВред рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЧрддрддрд╛ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ?

рдФрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдореИрдВ рдкреНрд░реА.рдЕрдкрдбреЗрдЯ рдкрд░ рдПрдХ рдореВрд▓реНрдп рдХреЛ рд╕реНрд╡рдЪреНрдЫ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ ... рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж!

schema.pre('update', function() {
  var v = this.getUpdate().valueToSanitize;
  this.update({}, { $set: { valueToSanitize: sanitize(v) } });
});

рдЕрдЪреНрдЫрд╛, рдореИрдВ рдЗрд╕реЗ рдЖрдЬрдорд╛рдЙрдВрдЧрд╛!
рдзрдиреНрдпрд╡рд╛рдж!!

рдЕрд░реЗ @ vkarpov15 , рдореБрдЭреЗ рдХреБрдЫ рдРрд╕рд╛ рдорд┐рд▓рд╛ рд╣реИ рдЬреЛ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рддрд░рд╣ рдХрд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдЧрд░ рдореИрдВ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдБ

MyModel.findOneAndUpdate({a: 1}, {v: '__3'}, function (err, model) {
    console.log(model);
});

рдФрд░ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдкрд░ рдореИрдВ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реВрдВ

mySchema.pre('findOneAndUpdate', function() {
  var v = this.getUpdate().v;
  this.findOneAndUpdate({}, { $set: { v: sanitize(v) } });
});

рд▓реЙрдЧ '__3' рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓ рдЕрдкрдбреЗрдЯ рдХреНрд╡реЗрд░реА рдХреЛ рд╣реБрдХ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВ рдЕрдиреНрдп рд╕реНрдХреАрдорд╛ рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ рд▓реЗрдХрд┐рди рдореВрд▓ рдХреНрд╡реЗрд░реА рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рд╕рднреА рдлрд╝реАрд▓реНрдб рд╡рд╣реА рд░рд╣реЗрдВрдЧреЗ, рднрд▓реЗ рд╣реА рд╡реЗ рдкреНрд░реА рд╣реБрдХ рдореЗрдВ рдмрджрд▓ рдЧрдП рд╣реЛрдВред

@CMatias рдпрд╣ рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ $set рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рд▓рдЧрд╛рддрд╛рд░ рдирд╣реАрдВред рдиреЗрд╡рд▓рд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ $set рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ this.findOneAndUpdate({}, { v: sanitize(v) }); рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

@ vkarpov15 рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ред рдХреНрдпрд╛ рдЖрдк рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ $set рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ? рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдорд┐рд▓ рдкрд╛ рд░рд╣реА рд╣реИред

рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ рдореВрд▓ mongodb рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ coll.findOneAndUpdate({ a: 1 }, { __v: 3 }) рдХрд░рддреЗ рд╣реИрдВ, рддреЛ mongodb рдкрд╣рд▓рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ a = 1 рдХреЗ рд╕рд╛рде рд▓реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ { __v: 3 } modulo _id рд╕реЗ рдмрджрд▓ рджреЗрдЧрд╛ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рдореМрдЬреВрджрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджреЗрдЧрд╛ред рдХреЗрд╡рд▓ '__v' рдХреБрдВрдЬреА рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ coll.findOneAndUpdate({ a: 1 }, { $set: { __v: 3 } }) рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣рдореЗрд╢рд╛ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдФрд░ рддреНрд░реБрдЯрд┐-рдкреНрд░рд╡рдг рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдиреЗрд╡рд▓рд╛ рдЖрдкрдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, MyModel.findOneAndUpdate({ a: 1 }, { __v: 3 }) рдмрди рдЬрд╛рддрд╛ рд╣реИ MyModel.collection.findOneAndUpdate({ a: 1 }, { $set: { __v: 3 } }) _unless_ рдЖрдк overwrite: true рд╡рд┐рдХрд▓реНрдк рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк MyModel.update({}, { $set: { b: 2 } }).findOneAndUpdate({ a: 1 }, { __v: 3 }, { overwrite: true }) рдЬреИрд╕реА рдЕрдЬреАрдм рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдХрд╛рдлреА рднреНрд░рдорд┐рдд рдХрд░рддреА рд╣реИрдВ рдХрд┐ getUpdate() рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо update рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╡реИрд╕реЗ рд╣реА рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдПред

рдореИрдВ рдЗрд╕ рд╕рдм рдХреЛ рдЯрдЯреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рди рд╕рдордп рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЙрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдЗрди рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЦреЛрдЬ рд╕реЗ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдХрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ "рд╕рдЬрд╛рдиреЗ" рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╕реНрдХреАрдорд╛ рд╣реИ:

const Thing = new mongoose.Schema({
  name: {type: String}
});

Thing.post('find', function(doc, next){
  doc.newfield = "example text";
  next();
}

рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ?

рд╕реНрдХреАрдорд╛ рдореЗрдВ newfield рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ Thing рдХреЗ рдорд╛рдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╡рд┐рднрд┐рдиреНрди рдлрд╝реАрд▓реНрдб рдирд╛рдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж!

рдореБрдЭреЗ schema.pre('update') рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд▓рдЧрдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рдирд╣реАрдВ @jrogatis

@vkarpov15

рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП ...:

schema.pre('update', function() {
  var v = this.getUpdate().valueToSanitize;
  this.update({}, { $set: { valueToSanitize: sanitize(v) } });
});

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред this.getUpdate().value рдореЗрдВ рдореЗрд░реА рд╕рдВрдкрддреНрддрд┐ value рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ this.getUpdate().$set.property рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЙрдкрд▓рдмреНрдз рд╣реИред

рдХреНрдпрд╛ рдРрд╕рд╛ рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рдЧрд▓рдд рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдБ? рдХреНрдпрд╛ рдПрдкреАрдЖрдИ рдмрджрд▓ рдЧрдпрд╛? рдХреНрдпрд╛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИ?

@qqilihq рдХреНрдпрд╛ рдЖрдк рд░реЗрдкреНрд░реЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ?

@qqilihq nvm, рдмрд╕ рджреЗрдЦрд╛ рдХрд┐ рдЖрдкрдиреЗ рдХрд┐рдпрд╛: P

@varunjayaraman рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВрдиреЗ рдЬреЛ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓рд╛ рд╡рд╣ рдПрдХ рдЕрд▓рдЧ рд╣реИ :) рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд┐рдирдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдкрд░реЛрдХреНрдд рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдЦреБрд╢реА рд╕реЗ рдПрдХ рдирдпрд╛ рдЦреЛрд▓реВрдВрдЧрд╛ред

@qqilihq рдЖрд╣ рдареАрдХ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж!

рдореЗрд░реЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рдЬреИрд╕рд╛ @qqilihq . рдиреЗ рдмрддрд╛рдпрд╛ рд╣реИ

image

рддреЛ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╡рд╛рдВрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

userSchema.pre('update', function (next) {
  const newEmail = this.getUpdate().$set.email
  if (newEmail) {
    this.update({}, {$set: {email: normalizeEmail(newEmail)}})
  }
  next()
})

рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рдРрд╕реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рдирд╣реАрдВ рд╣реИрдВред

pre рд╡рд┐рдзрд┐ this.update рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ "рдкреВрд░реНрд╡" рд╣реИ рдФрд░ рдЕрднреА рддрдХ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рдЬрдмрдХрд┐ this.newProp = "value" рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж рджреЛрд╕реНрддреЛрдВред

рдореЗрд░рд╛ рдорд╛рдорд▓рд╛ рд╣реИ:

UserSchema.pre('save', function(next) {
    this.created = Date.now()
    next()
})

рдореИрдВ "рдкреНрд░реА" рдЕрдкрдбреЗрдЯ рд╣реБрдХ рдкрд░ рдХреНрд╡реЗрд░реА рдХреЛ "рдпрд╣" рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рдкреАрдЫреЗ рддрд░реНрдХ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди "рдкреЛрд╕реНрдЯ" рдЕрдкрдбреЗрдЯ рд╣реБрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпреЛрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ? рдЕрджреНрдпрддрди рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЙрдбрд▓ "рдпрд╣" рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ?

рддреЛ рдлрд┐рд░ рдкреЛрд╕реНрдЯ рдЦреЛрдЬ рдХрдИ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдЧреА рдпрд╛ this рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ? рдФрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдкреЛрд╕реНрдЯ рдЦреЛрдЬ рдХреЛ рдирд╣реАрдВ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдпрд╣ рд╕рдм рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИред рдЖрдИрдПрдордПрдЪрдУ рдкреНрд░реА рд╣реБрдХ рд╕рднреА рдХреЛ рдПрдХ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, this рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдЬреИрд╕реЗ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╣реИрдВред

рдЕрд╕рд▓ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдмрд╕ рдкреВрд░реНрд╡ 'рд╕реЗрд╡' рд╡рд┐рдзрд┐ рдФрд░ рдлрд┐рд░ this.isNew рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдзрдиреНрдпрд╡рд╛рдж!

@ajbraus рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдХрд▓реНрдк рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдУрд╡рд░рд╣реЗрдб рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрдкрдбреЗрдЯ рд╣реИ, рдЬреЛ рд▓рд╛рдЦреЛрдВ рдбреЙрдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ - рдиреЗрд╡рд▓реЗ рдХреЛ рдЙрди рд╕рднреА рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрдкрдбреЗрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рд╕реА рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдлрд╝реАрд▓реНрдб рдХреА рдЬрд╛рдВрдЪ рдХреИрд╕реЗ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП? рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ "рд╡реИрдз" рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдлрд╝реАрд▓реНрдб рднрд░реЗ рдЧрдП рд╣реИрдВ, рдореИрдВ рдкреВрд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реВрдВ, рди рдХрд┐ рдХреЗрд╡рд▓ рдлрд╝реАрд▓реНрдб рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ? this рдпрд╣рд╛рдВ рдХреНрд╡реЗрд░реА рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣рд╛ рд╣реИ

@ рдкреАрдбреАрдПрд╕42 рдЖрдкрдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдореЛрдВрдЧреЛрдбрдм рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдХреНрд╡реЗрд░реА рдЪрд▓рд╛рдиреА рд╣реЛрдЧреА

рдХреНрдпрд╛ рдиреЗрд╡рд▓рд╛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд▓рд┐рдВрдХ рд╣реИ рдЬрд╣рд╛рдБ рдпрд╣ рд╕рдм рдЕрдзрд┐рдХ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдореБрдЭреЗ рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдФрд░ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдкреВрд░реА рддрд░рд╣ рд╕рдордЭрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ :)ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

рдкреВрд░реНрд╡ рдЕрджреНрдпрддрди рд╣реБрдХ: https://github.com/Automattic/mongoose/issues/2812
рдорд┐рдбрд▓рд╡реЗрдпрд░: https://mongoosejs.com/docs/middleware.html
рдХреНрд╡реЗрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ: https://mongoosejs.com/docs/api.html#Query
рдкреНрд░рд╢реНрди: https://mongoosejs.com/docs/queries.html

рдореБрдЭреЗ рдЕрджреНрдпрддрди рдорд┐рдбрд▓рд╡реЗрдпрд░ рдореЗрдВ 'рдЗрд╕' рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдЦреЛрдЬрдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм:
this.update({field: "value"}, {$set: {updatedAt: new Date()}}); рдХреНрдпрд╛ рдпрд╣ рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ {field: "value"} рдЬреЛрдбрд╝рддрд╛ рд╣реИ? рдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдЕрд╕рд░ рдирд╣реАрдВ рд╣реЛрддрд╛? рдХреНрдпрд╛ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИ рдЬреЛ рдореИрдВ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ?

@ronakvora рдПрдХ Query#getConditions() рдлрд╝рдВрдХреНрд╢рди рд╣реИ ред

schema.pre('update', function() {
  console.log(this.getConditions()); // Will include `{ field: 'value' }`
});

рдЧреЛрдЪрд╛, рдЗрд╕рд╕реЗ рдореБрдЭреЗ рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА :)ред рдзрдиреНрдпрд╡рд╛рдж!

рдкреАрдПрд╕ рдпрд╣ рдКрдкрд░ рд╕реЗ рд░реМрдирдХ рд╣реИред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рджреЛ рдЦрд╛рддреЗ рд▓реЙрдЧ рдЗрди рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jeremyml picture jeremyml  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ArThoX picture ArThoX  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gustavomanolo picture gustavomanolo  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

simonxca picture simonxca  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

AraanBranco picture AraanBranco  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ